抽象类的使用以及抽象类和接口的区别

时间:2016-03-27 00:00:01   收藏:0   阅读:296

一、抽象类

抽象方法:只有方法声明,没有方法实现。使用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

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!