【面向对象】接口和抽象类

1.核心区别

  • 抽象类可以更好的实现代码的复用
    抽象类中不一定都是抽象的方法,也可以有具体实现的方法,这样就可以把大家公用的方法提升到抽象类中,然后具体的方法可以留给子类自己实现。
  • 抽象类能实现更好的扩展
    实现类要想扩展只能改变接口,因为接口和抽象类设计出来作为被公共使用的对象,你不会知道有多少人在使用这个接口或者抽象类,一旦修改接口或抽象类,势必要惊动使用者,而修改的内容,使用者也不一定能用到。而使用抽象类,实现类可以直接扩展,并且不会影响其它实现类。
  • 抽象的对象不一样
    接口是对动作的抽象,抽象类是对根源的抽象(即对事物本质的抽象)。
  • 接口更加合适实现多态
    多态主要是分离“做什么”和“怎么做”。由于接口更关注于动作的实现,更适合实现多态(当然抽象类也可以实现多态)。

2.用法上的区别

  • 共同点:都不能被实例化。
  • 抽象类
    (1)抽象方法必须为public或者protected,缺省情况下默认为public。
    (2)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
  • 接口
    (1)接口中可以含有 变量和方法,接口中的变量会被隐式地指定为public static final变量。而方法会被隐式地指定为public abstract方法且只能是public abstract方法。
    (2)接口中所有的方法不能有具体的实现。接口中的方法必须都是抽象方法。从这里可以隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。
  • 语法层面上的区别
    (1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
    (2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
    (3)抽象类可以有静态代码块和静态方法,而接口中不能含有静态代码块以及静态方法;
    (4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容