相信大家在进行面试的很大部分程度上一定会被提问道关于抽象类和接口的问题,那么接下里我就简单的为大家进行解释
(参考书上说抽象类和interface如何如何的不容易理解,那么我将用最通俗的说法让各位明白)
个人理解:
abstract顾名思义为抽象类,简单的理解为“你是什么?”是对类的抽象(属性和行为)
对应的
interface则仅仅是理解为对行为的抽象,可以理解为“你有没有(什么能力)?”(仅仅表示为行为),为一种抽象的抽象
因此:
就会出现课本说的,abstrace是继承的关系在子类中需要对其进行重写操作;
而对于interface则是“我能实现什么”(上面说到的某方面的能力)
举例说法:
换言之举个很简单的例子:假设在你面前有一台汽车和自行车,他们都具有“驾驶的能力”,但是他们分别指向不同的事务,我们可以把他们分别抽象为Moto,Car两个抽象类,而能驾驶是一种行为,或者是一种操作,我们不能把它们定义为抽象类abstract,因此只能定义为一个接口Driveinterface,配合上相应的驾驶的drive() 方法 ,而汽车和自行车可以调用这个drive方法来实现对应的功能(行为),而对于汽车中有不同的类型,如奥迪,奔驰,只需要继承抽象方法即可,调用接口的方法,因此为了实现驾驶的功能只需要调用DriverInterface的接口即可,从而实现驾驶的功能。
综上所属:如上文所说:abstaract属于“是不是”的范畴 interface属于“你有什么(能力)”的范畴
那么带着上面说的知识去理解下面的区别就很容易理解了不需要死记硬背
二者区别:
抽象类:(1)是用于抽取子类通用特性的,即说的作为父类被子类继承
(方便子类复用;同时子类也可以重写父类实现自己的逻辑)
(2)可以有构造函数,但本身不能实例化。
(3)抽象方法需要用abstracte关键字来修饰,且不能用 private关键字来修饰,因为抽象方法需要被子类重写
接口:(1)必须实现接口中的方法,因为无构造函数所以不能实例化;
(2)接口内部方法默认为 public访问级别,不能用final关键字修饰方法
(注)接口中只能包含抽象方法,默认省略 public abstract修饰字,也可以包含static方法和 default方法。但是不能包含其他任何已经实现的方法
共同点:(1)不能实例化
区别:(1)一个类可以对应对个实现(implement)多个接口,但是一般来讲一个类只能实现(extends)一个抽象类
(2)对于interface接口而言,成员变量都是public static 类型 而对于方法而言可以是 abstract或者是public的形式
但是对于抽象类而言只能是abstract