Java中的抽象类与接口

前提背景在面试到Java基础知识的时候,总喜欢问抽象类接口的区别,在这里记录一下自己复习的笔记

抽象类 abstract class

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

  • 使用abstract修饰的类
  • 不直接可以实例化
  • 内部可以声明abstract修饰的方法(只有方法头,没有方法体)
  • 内部也可以声明普通的成员方法(包含方法头,和方法体)

    思考:
    抽象类内部是不是必须要有抽象方法呢? 不是必须!
    抽象方法是不是必须声明在抽象类内部呢? 必须的!

接口 interface

  • 使用interface修饰的类
  • 不直接可以实例化
  • 内部只能声明public abstract方法 (只有方法头,没有方法体,public abstract 声明可以不写,因为默认)

区别与联系

  • 区别
    • 抽象类中可以有普通的成员方法,接口只有抽象方法
    • 抽象类中的方法可以有public,private,protected修饰方法,接口只有public
    • 抽象类可以有构造器,接口没有构造器,抽象类依然是属于类的范畴,(抽象类如果定义了含有参数的构造函数 Parent(int a),子类集成时必须在构造函数中显式调用父类的改构造器进行初始化super(a))
    • Java中只能集成一个类,可以实现多个接口
  • 联系
    • 接口声明能力,抽象类提供默认的实现,在编码时可以选择全部重写还是部分重写来实现自己的逻辑,例如Collection接口和对应的AbstractCollection抽象类

其他思考

  • 抽象类的意义
    • 对实现其的子类一种强制规范,子类必须实现抽象父类的所有抽象方法

参考链接

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容