Java学习笔记;接口与抽象类的区别

(自我理解)
由于继承的定义可知,一个子类只能有一个父类,却可以实现多个接口
这就导致了接口远比抽象类更加灵活。
假若有2个类;公交车类与计程车类;
它们都继承了一个抽象类–制动类;制动类包含了2个抽象方法:启动和刹车。显然这都是合理的,2类车都可以启动和刹车。
但假如公交车类想要多一个播报车站的功能时,其不可能再去继承一个含有abstrac播报车站方法的抽象类。(只能有一个父类)但接口可以有多个,此时可以单独写一个只含有abstrac播报车站方法的接口。
虽然可以将abstrac播报车站方法加入到制动抽象类中,但第一这不合条理(功能上没啥问题),播报车站功能不属于制动类,第二,因为计程车也继承了该制动类,必须重写该类所有的抽象方法,也就是说计程车也要重写这个播报车站方法却不需要这个功能,而且假如计程车也需要一个自己独有的方法(比如去随机地点接客),总不能也把这个方法也加入抽象类再让公交车类去重写一遍吧。何况这才2个类,更多类则更复杂。
语法区别
抽象方法只能存在于抽象类中,抽象类可以含有非抽象方法。
接口体中只能声明变量(没有变量)且只有抽象方法。

抽象类中抽象方法不能用static修饰(必须是实例方法)
接口中常量权限一定是public、final,但其修饰字符可以被省略。且接口中的方法权限一定问public abstract,也可以省略修饰词。

抽象类的子类必须重写该类的所有抽象方法
实现接口的类必须重写接口体中的所有方法(接口体中只能含有抽象方法),且重写的方法的权限必须是public(修饰词不能少,重写不允许减低方法的权限,可以提高权限)。

猜你喜欢

转载自blog.csdn.net/Eysunvoes/article/details/88303549
今日推荐