抽象类-接口

区别:

  • 首先接口和抽象类的设计目的就是不一样的。接口是对动作的抽象,而抽象类是对根源的抽象

    对于抽象类,比如男人,女人这两个类,那我们可以为这两个类设计一个更高级别的抽象类--人。

    对于接口,我们可以坐着吃饭,可以站着吃饭,可以用筷子吃饭,可以用叉子吃饭,那么可以把这些吃饭的动作抽象成一个接口--吃饭。

    所以在高级语言中(如Java,C),一个类只能继承一个抽象类(因为你不可能同时是生物又是非生物)。但是一个类可以同时实现多个接口,比如开车接口,滑冰接口,游泳接口。

  • 抽象类和接口都不能被直接实例化,如果二者要实例化,就涉及到多态。

    如果抽象类要实例化,那么抽象类定义的变量必须指向一个子类对象,这个子类继承了这个抽象类并实现了这个抽象类的所有抽象方法。

    如果接口要实例化,那么这个接口定义的变量要指向一个子类对象,这个子类必须实现了这个接口所有的方法。

抽象类

(除非子类仍然是抽象类,因此要让子类的子类来实现方法)

不能new抽象类,只能靠子类去实现;抽象类中可以写普通的方法;抽象方法只能在抽象类中

接口

接口比抽象类还要抽象,自己无法写方法,只有规范;达到约束和实现分离;

接口不能被实例化;接口中没有构造方法;







在以前jdk版本在接口中是只允许定义方法方法名,不允许实现方法体的。
但是在jdk1.8中,新增了一个default修饰符(注意此处不是public、protected、default、private四个修饰符中的default,四个修饰符的default是不写的就代表default),
jdk1.8中凡是经default修饰的方法,可以写方法体。同时实现类里可不用实现default修饰的方法,只需在使用时再次实现
注意:接口实现类里在实现default方法时,修饰符只能使用public修饰


JDK 8允许接口中定义default 方法的目的可能有2个,一是增强接口的能力,将许多类需要的成熟的算法用default方法提供给类,二是便于旧的系统的扩展,比如,已有系统中的某接口增加一个default 方法不会引起系统的崩塌(如果接口增加一个abstract方法,所有曾实现该接口类将面临修改和重新编译)。




注意:抽象类中可以没有抽象方法,也可以包含非抽象方法,但有抽象方法的类一定是抽象类



参考链接:

https://www.cnblogs.com/jybky/p/12053255.html

https://new.qq.com/omn/20220228/20220228A03GRE00.html



posted @ 2021-07-02 09:35  卡卡发  阅读(172)  评论(0)    收藏  举报