设为首页 加入收藏

TOP

J2SE知识点归纳笔记(三)---Java面向对象 Part 3(一)
2014-11-23 23:56:29 】 浏览:4413
Tags:J2SE 知识点 归纳 笔记 ---Java 面向 对象 Part

Java面向对象 Part 3


前言


在前面的两节中我们对面向对象已经有了差不多的了解了,

而这一节也是Java面向对象部分的一个结尾,

在这一节中我们会对抽象类,接口,修饰符,枚举,封装进行解析;





抽象类


什么是抽象类

我们将具有共同特点的类进行抽象后得到的一个类,而这个类本身的方法并没有任何具体的实现;

eg:定义一个抽象的动物类,然后定义几个抽象方法(动物共有的方法),比如设置有多少只脚的方法

public abstract void setFoods();


抽象类的定义:

一般使用abstract关键字修饰

抽象类: 修饰符 abstract 类名{//类的内容}

抽象方法: 修饰符 abstract 返回值类型 方法名();


抽象类的使用规则:

①如果一个类有一个抽象方法,那么这个类一定是抽象类;反之,如果一个类是抽象类,但可能包含有非抽象的方法

②如果一个类继承了一个抽象类,那么必须重写抽象类中所有的抽象方法,是所有!所有!如果没有全部实现的话

那么子类必须也要定义为一个抽象类

③abstract不能和static放在一起,否则会出现错误(因为static不能被覆盖,abstract为了生效,必须被覆盖)

④抽象类可不能定义为最终哦!abstract不能与final共存!

⑤注意区分方法的空实现和方法的抽象

eg:方法的空实现:private void show(){} 方法的抽象,无实现: private void show();

⑥抽象类不能够实例化哦!但是可以new的时候重写里面的抽象方法



抽象类使用实例

代码:

package com.jay.example;



/*
 * 该代码是定义一个抽象类,汽车类,定义几个属性和抽象方法
 * 然后定义客车,吊车类作为它的子类,
 * 在客车类中即重写抽象方法,也重写了具体方法
 * 在吊车类中,只是重写具体方法,不重写抽象方法,所以吊车类
 * 需要被设置为抽象类,否则会报错
 * */


abstract class Car
{
	protected String color;
	protected int sudu;
	
	//定义一个具体的方法
	public void speed()
	{
		System.out.println("加速");
	}	
	//定义一个抽象方法,是方法的空实现哦,子类继承时需要覆盖该方法
	public abstract void useful();
}

class Truck extends Car
{	
	public void speed()
	{
		System.out.println("卡车起步很慢");
	}
	public void useful() {
		System.out.println("卡车是用于货运的!");
	}
	
}


//定义吊车类,没有实现抽象方法,所以需为抽象类
abstract class Crane extends Car
{
	public void speed() {
		System.out.println("吊车走得更加慢!");
	}
}


public class AbstractDemo {
	//抽象类可不能直接实例化哦!Car c = new Car()是会报错的
	//当然可以通过向上转型的规则:Car c = new Track();是可以的
	public static void main(String[] args) {
		Truck tr = new Truck();
		tr.speed();
		tr.useful();
		//下面是演示protected修饰的作用于,子类或者同包可见
		tr.color = "白色";
		tr.sudu = 40;
		System.out.println(tr.color + tr.sudu + "km/h");
	}
	
}


运行截图:

\


代码解析:

该代码演示了抽象类的基本用法,定义抽象类父类Car,定义了一个抽象方法和具体方法

然后在卡车类中都重写了两个方法;在吊车类中仅仅重写了具体方法,所以吊车类需要被设置为抽象类

最后还演示了protected的作用域:子类与同包可见



接口


接口的介绍:

因为Java的数据结构是树型的,所以不像C++那样可以同时继承多个父类;但是Java通过接口和内部类实现了多继承

接口是一种特殊的抽象类,一个类实现一个接口,相当于它继承了一个抽象类


接口的定义:

修饰符 inteface 接口名{"内容"}


接口的实现:

一个类可以在继承一个父类同时实现多个接口,用","分隔

class 类名 extents 父类 implements 接口1,接口2...{}


使用规则:

①一个Java文件中只允许有一个public修饰的类或者接口,且需与文件名同名,是一个!!

②在一个接口中,所有方法都是公开的,抽象的方法!!所有的属性都是公开,静态,常量!

③如果一个类声明实现一个接口,但是没有实现接口中的所有方法,那么这个类必须是抽象类哦!

④接口只关心功能,并不关心功能的具体实现

⑤接口也可以通过extends继承哦!但是依旧需要实现子接口和父接口中的所有抽象方法

⑥接口中的方法可以不写public,但是子类实现接口中的抽象方法时,要写上public,不然会报错哦!


代码示例:


package com.jay.example;

/*
 * 在这个代码中,我们定义了两个父接口,又用一个子接口对两个父接口进行了继承
 * 同时为子接口又定义了一个抽象方法;然后定义了一个Person实现两个父接口
 * 重写了两个抽象方法;又定义了一个Worker实现了子接口,但同时也需要把父接口
 * 中的抽象方法进行覆盖
 * 
 * */


//定义一个说话的接口
interface Speak
{
	void speak();
}

//定义一个吃饭的接口
interface Eat
{
	void eat();
}

//定义一个子接口,同时继承说话和吃饭的接口,同时定义一个走路的方法
interface Walk extends Speak,Eat
{
	void walk();
}

//定义一个Person类,实现说话和吃饭接口,重写接口中的抽象方法
//子类在实现接口的时候,public修饰符不可以省略,不然会报错
class Person implements Speak,Eat
{
	public void speak()
	{
		System.out.println("Person类可以说话");
	}
	public void eat()
	{
		System.out.println("Person类可以吃饭");
	}
}

//定义一个Worker类直接实现walk接口,同时要实现两个父接口中的抽象方法
class Worker implements Walk
{
	public void speak()
	{
		System.out.println("Worker类可以说话");
	}
	public void eat()
	{
		System.out.println("Worker类可以吃饭");
	}
	public void walk()
	{
		System.out.println("Worke
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇JavaWeb学习篇之----Servlet 下一篇jsp页面 java 文件下载设置禁止IE..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目