abstract:
修饰符号,声明抽象方法和抽象类。声明方法时表示该方法只有特征签名,没有具体实现。而是把具体实现留给继承该类的子类,并且抽象类不能直接用new来实例化对象即使有公共的构造函数。
1,abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型,抽象类就像当于一类的半成品,需要子类继承并覆盖其中的抽象方法。
2,abstract修饰方法,会使这个方法变成抽象方法,也就是只有声明(定义)而没有实现,实现部分以";"代替。需要子类继承实现(覆盖)。
abstract和interface:
基本用法:
abstract可以有自己的数据成员,也可以有非abstract的成员方法。
interface只能有static final的数据成员(一般不定义数据成员),不允许有非abstract成员方法。
高级用法:
abstract class是一个类,抽象的而已,不能被实例化,用于子类继承,表示“is-a”的关系。关键字extends,java中只能是单继承。子类继承时,可以不全部覆盖父类的abstract方法,这是子类任然是一个abstract class。
interface是接口,没有类的概念,是一份“大家”都遵守的契约,用于实现接口,表示“like-a”的关系。关键字implements,可以实现多个接口。实现接口时,必须覆盖接口的所有方法。
例子:(门和报警门)
抽象类 门
abstract class Door {
abstract void open ();
abstract void close ();
}(并不是所有的门都有“报警”功能,但是所有的门都有“开”和“关”的功能)
接口 报警功能
interface Alarm {
void alarm();
}
有报警功能的门
class AlarmDoor extends Door implements Alarm {
void open() {...}
void close() {...}
void alarm() {...}
}