我所理解的接口和抽象类

来源:互联网 发布:赎罪 长镜头 知乎 编辑:程序博客网 时间:2024/06/07 02:02

参考:http://www.cnblogs.com/huihui-gohay/archive/2009/12/13/1623070.html


在实践过程中,抽象类和接口都经常用到。但是,对于什么情况下该用抽象类,什么情况下该用接口,总是有点搞不清楚。

于是,在阅读别人对着两者理解之后,终于对两者的区别有了更进一步的理解。

有关这两者的一些基本区别,可以参考上面的文章。这里我只介绍下对于抽象和接口该在什么情况下使用的理解。

抽象类重点在于对于属性和方法的继承;而接口则重在多个类(可能他们之间毫无联系)对同一种方法或者属性的描述,体现了多态性。


抽象出一个类(类),定义一个抽象方法(判断是否会飞)

1、抽象类

例如:抽象出一个鸟类。对于鸟类,抽象出一个方法。用来判断这种鸟会不会飞。

由于鸟类中的canFly是抽象方法,因此所有继承鸟类的子类都必须实现这个canFly方法。

/** * 鸟 */public abstract class Bird {public abstract boolean canFly();}/** * 燕子 *  */public class Swallow extends Bird{@Overridepublic boolean canFly() {// TODO Auto-generated method stubreturn false;}}/** * 猫头鹰 * */public class Owl extends Bird{@Overridepublic boolean canFly() {// TODO Auto-generated method stubreturn false;}}

假如现在有这种状况。要同时描述鸟类和飞机,它们可以有一个共同的方法来判断是否能飞。但是这个时候,两者肯定是没有继承关系的啦。

你不能指望飞机通过继承鸟类来获得这个canFly的方法。

此时,你就可以把canFly抽象到接口中,然后鸟类和飞机都继承这个接口。

2、接口

public interface IFly {public abstract boolean canFly();}/** * 鸟 */public class Bird implements IFly{@Overridepublic boolean canFly() {// TODO Auto-generated method stubreturn false;}}/** * 飞机 * */public class Airplane implements IFly {@Overridepublic boolean canFly() {// TODO Auto-generated method stubreturn true;}}



原创粉丝点击