Java关键字之abstract浅析

转自: http://www.jz123.cn/text/0730073.html

 

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() {...}

  }

posted @ 2013-06-07 15:46  `Liok  阅读(177)  评论(0)    收藏  举报