02 JAVA 对象补充 抽象VS接口

来源:互联网 发布:mac qq接受文件没反应 编辑:程序博客网 时间:2024/06/04 01:10

接口和抽象怎么听起来那么像呢?都是只定义方法而不实现,而且抽象可以继承抽象,接口可以继承接口,到底哪里不同啦?其实我也不知道,我就随便乱写写~ 

  • 抽象方法(是不是)

1. 复习一下动态继承,动态继承就是我们希望面对某类的不同的子类的时候,执行环境可以很智能的调用不同的方法,比如Aminal类的Cat子类,我们调用“喵喵喵”叫方法,而如果是狗子类时,我们调用“汪汪汪”叫方法,此时我们根本不需要实现Aminal类中的叫方法,因为根据动物种类的不同,叫法也不是不同的,此时就可以用abstract抽象类。所以,抽象类作为父类,提供子类可以拥有的属性和功能;当然我们也可以根据一组共同的行为来定义一个抽象类;抽象类只能是单继承

2. 抽象方法必须是public或者protected的,缺省情况默认为public,不能使private,这样的话,子类就不能继承实现抽象方法啦,抽象类不能创建实例,抽象类中可以没有抽象方法

3. 想要修改所有子类默认特性的时候,只需要修改抽象父类,所以便于管理

  • 接口(有没有)

1. 接口主要是提供行为的抽象,比如呼吸接口,对于人类,植物类和真菌类都可以实现自己的呼吸方式,再比如思考接口,人类可以实现。接口可以实现多继承,接口类不能创建实例

2. 所有方法都是抽象的,所有属性和方法都是public的


例1:飞机和鸟是不同的种类,他们之间的相同特点是都会飞,此时我们可以采用接口飞;男人,女人,ambisexulity都是人类,它们同时拥有相同的方法和属性,此时我们构建一个抽象的人类

例2:对于Door概念,具有两个动作open和close,此时我们可以使用抽象或者接口来描述这个概念,此时我们想要让这个门拥有alarm功能

因为open和close是Door本身具有的功能,alarm则不一定,有些门可能并不能alarm,此时我们可以定义两个抽象类或两个接口,或一个抽象类和一个接口,怎么选呢?

- 两个抽象类不可行,因为抽象类不支持多继承,alarmDoor要继承两个类是不可能的

- 两个接口的话,其实不合理,因为open和close是所有门都具有的特性,也可以说是门类拥有的方法

- 门抽象类+alarm接口刚刚号


Reference:

1. http://www.cnblogs.com/dolphin0520/p/3811437.html

2. http://www.cnblogs.com/azai/archive/2009/11/10/1599584.html



0 0
原创粉丝点击