人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。

  抽象类是用来捕捉子类的通用特性的,描述的是一种事物,它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。

  接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。

  抽象类是对整个类进行抽象,包括属性,行为,而接口是对类局部(行为)进行抽象。

 

  举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是会飞。那么在设计的时候,可以将客机设计为一个类Aircraft,将鸟设计为一个类Bird,但是不能将飞行这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将飞行设计为一个接口Fly,包括方法fly(),Aircraft和Bird分别根据自己的需要实现Fly这个接口。至于有不同种类的飞机,可以继承自一个飞机类,不同种类的鸟,可以继承自飞行动物这一类。

代码实现如下:

Fly接口:

 

Animals的抽象类:

 

 飞机的抽象类:

 

继承自Animals类,实现Fly接口的Bird:

 

继承自Plane类,实现Fly接口的Aircraft类:

 

根据实践,总结抽象类和接口的区别如下:

 

参数 抽象类 接口
默认的实现方法 可以有默认的方法实现 接口完全是抽象的,不存在方法的实现
实现 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它必须提供抽象类里面的所有声明的抽象方法的实现。非抽象方法则不是必须实现 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现
构造器 抽象类可以有构造器 接口不能有构造器
与正常Java类的区别 除了你不能实例化抽象类之外,它和普通Java类没有任何区别 接口是完全不同的类型
访问修饰符 抽象方法可以有public、protected和default这些修饰符 接口方法默认修饰符是public,不可以使用其他修饰符
main方法 抽象类可以有main方法并且可以运行 接口没有main方法
多继承 抽象类可以继承一个类和实现多个接口 接口只可以继承一个或多个其他接口
速度 它比接口速度要快 接口稍微有点慢,因为它需要时间去寻找在类中实现的方法
添加新方法 如果往抽象类里面添加新的方法,可以给它提供默认的实现,因此不需要改变现有的代码。 如果在接口中添加方法,那么必须改变实现该方法的类。
posted on 2019-08-05 17:22  测试开发喵  阅读(341)  评论(0编辑  收藏  举报