本文引用资源申明:
http://blog.csdn.net/xw13106209/article/details/6923556
http://www.cnblogs.com/dolphin0520/p/3811437.html
http://www.tutorialspoint.com/java/java_abstraction.htm
1. 抽象类
关键词:abstract
定义:含有抽象方法的类,也可以有具体方法。
抽象方法:只有方法的声明,没有body。 用;结尾,没有{}。抽象类的抽象方法就是强制子类必须去实现的。
抽象类是为了继承而存在的。如果一个父类,它的某个方法在父类中实现出来没有任何意义,必须根据子类的需求具体进行不同的实现,那么可以将这个方法声明为abstract方法,父类标为abstract类。
不要去写一个具体类去继承另外一个具体类,这个设计会有很大问题。
抽象类和普通类的区别:
a:抽象方法必须为public或者protected
b: 抽象类不能用来创建对象(因为有抽象方法,不能实现)
c:如果一个类继承与一个抽象类,子类必须实现父类的抽象方法。如果子类不能实现,那么子类也要是abstract。
2. 接口
定一个接口: public interface Name{}
接口中只能定义方法,不能有方法的实现。也就是说,接口中的方法都是抽象方法,而且是public abstract方法。接口中的变量都是public static final变量。
3. 区别
(1)总体来讲:
可以认为接口是抽象类的一种,只是多了许多限定条件。
a:接口中不能有静态代码块以及静态方法,抽象类可以有。
b:接口中不能提供方法的实现细节(body),抽象类的具体方法可以提供body。
c: 接口中的成员变量只能是public stratic final的
但是也有很大的好处,因为
一个类只能继承一个抽象类,但是可以引用(implement)多个接口,用,(逗号)连接
(2)
抽象类是对整个类包括属性、行为进行抽象,但是接口是对类的行为进行抽象。
如果一个类继承了某个抽象类,那么子类一定属于抽象类的种类(比如民用飞机属于飞机,燕子属于鸟)。但是接口是具备这个行为与否的关系,比如飞机和鸟都可以引用 “飞”这个接口来实现“飞”这个行为。所以,继承(extend)是“是不是”的关系,接口是“有没有”的关系。
举个例子,我们可以把飞机、鸟作为抽象类,“飞”作为接口,让整个两个抽象类实现“飞”这个接口,那他们就有了“飞”这个行为。让民用飞机继承飞机这个抽象类,那个民用飞机就可以飞并且含有飞机的基本属于,同理,燕子也是一样。
(3)
对于抽象类,如果需要添加新的方法,可以直接在抽象类的更改。但是对于接口,如果接口更改,则所有实现这个接口的类都必须做相应的改动。因为如果向接口添加了一个新的方法,那么所有实现这个方法的类都不能通过编译,必须让每一个类都实现这个方法才行。
如何在子类中实现抽象类的抽象方法?如果在引用接口的类中实现接口的方法??需要添加例子