Java中的抽象类与接口

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

抽象类 abstract class

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

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

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

接口 interface

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

区别与联系

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

其他思考

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

参考链接

  • https://www.runoob.com/java/java-abstraction.html
  • https://www.jianshu.com/p/038f0b356e9a
  • https://www.zhihu.com/question/19988552/answer/13575127
    -https://www.zhihu.com/question/19988552/answer/883553117

你可能感兴趣的:(Java中的抽象类与接口)