抽象类的使用以及抽象类和接口的区别
一、抽象类
抽象方法:只有方法声明,没有方法实现。使用abstract关键字进行修饰。
抽象类:类的抽象,可以包括属性和方法。抽象类包含有没有实现的方法,因此不可以直接使用抽象类创建对象,必须通过继续的方法创建新的类,通过实现了抽象方法的子类来创建对象。抽象类中使用抽象方法的场景:如果该方法在类中声明没有什么意义,必须要在子类中具体实现。
注意点:
抽象类中可以包括属性和一般方法(含有实现的方法);
抽象方法必须为Public或者protected,不可以为Private,因为private无法在子类中使用。
子类继续抽象类,必须实现抽象方法。如果子类没有实现父类的抽象方法,则必须也定义该方法为抽象方法,该子类为抽象类。
二、接口
方法的抽象。
接口中也可以包括变量声明,但是变量会隐式的被声明为:public static final变量。
方法隐式设置为public abstract方法。接口中的所有方法必须不能有具体实现。接口是一种极度抽象的类型。一般不在接口中定义变量。
三、抽象类和接口的区别
抽象类是对事务的抽象。
接口是对行为的抽象。
举例:飞机和鸟都有一个共性,会飞。所以可以设计类bird和类airplane,但是不能将飞设计为一个类,“飞”这个行为只能设计为接口。如果战斗机、民用飞机直接继承airplane类就可以了。继承是一个“是不是”的关系,而接口是“有没有”的关系。比如鸟,如果可以飞则实现 fly接口。
设计层面的区别:如果是抽象类,则修改了抽象类的方法或者添加方法以后,所有的子类都不需要进行修改,这是一种模板式的方法,而接口则是一种辐射式的方法,就像Ppt的模板,你有Ppta,pptb,那么修改Ppt模板,则所有的ppt都修改了。固有属性则则用抽象类,灵活选用的方法,则使用接口。
interface
Alram {
void
alarm();
}
abstract
class
Door {
void
open();
void
close();
}
class
AlarmDoor
extends
Door
implements
Alarm {
void
oepn() {
//....
}
void
close() {
//....
}
void
alarm() {
//....
}
}
原文:http://ironkui.blog.51cto.com/6419870/1755581