美文网首页
面向对象:Java 接口VS抽象类

面向对象:Java 接口VS抽象类

作者: 阿猫阿狗Hakuna | 来源:发表于2022-03-07 21:44 被阅读0次

    抽象类的特性

    • 不允许被实例化,只能被继承,不能new一个抽象类的对象出来;
    • 抽象类可以包含属性和方法。方法既可以包含实现,也可以不包含,不包含代码实现的方法叫做抽象方法;
    • 子类继承抽象类,必须实现抽象类中所有的抽象方法。

    接口的特性

    • 接口不能包含属性(也就是成员变量);
    • 接口只能声明方法,不能包含代码实现;
    • 类实现接口时,必须实现接口中声明的所有方法;

    两者区别

    抽象类表示的是is-a的关系,而接口表示的是has-a的关系,表示具有某种功能。对于接口,还有一种叫法,称为协议(contract)。

    抽象类和接口能解决的编程问题

    1.抽象类是为代码复用而生的。多个子类可以继承抽象类中定义的属性和方法,避免在子类中,重复编写相同代码。
    2.抽象类更多是为了代码复用,而接口更侧重于解耦。接口实现了约定和实现相分离,可以降低代码间的耦合性,提高代码可扩展性。

    该用抽象类还是接口?

    如果要表示is-a的关系,且为了解决代码复用问题,就用抽象类;
    如果要表示一种has-a的关系,且是为了解决抽象而非代码复用问题,就可以使用接口。

    抽象类是自下而上的设计思路,先有子类的代码重复,然后再抽象成上层父类;而接口正好相反,是一种自上而下的设计思路。编程时,一般先设计接口,然后再去考虑具体实现。

    相关文章

      网友评论

          本文标题:面向对象:Java 接口VS抽象类

          本文链接:https://www.haomeiwen.com/subject/latorrtx.html