Java基础——抽象类和接口的区别

抽象类:被abstract关键字修饰的类叫做抽象类

  1. 抽象类不能被实例化,只能被继承
  2. 包含抽象方法的一定是抽象类,但抽象类不一定含有抽象方法
  3. 抽象类中的抽象方法的修饰符只能是publicprotected,默认为public
  4. 子类继承抽象类必须实现所有父类声明的抽象方法,否则子类也是一个抽象类,必须被abstract关键字修饰
  5. 抽象类可以含有属性、方法、构造方法,但构造方法不能用于实例化对象,主要用于被子类调用做一些初始化工作

接口:接口使用interface关键字声明,接口不是一种类,而是对类的一组需求描述

  1. 接口不能被实例化,只能被实现
  2. 接口中不含有非抽象方法(Java 8 后可以非抽象默认方法
  3. 接口中只能声明公共常量 默认且只有public static final修饰
  4. 接口只能继承接口,且可以继承一个或多个接口
  5. 一个类实现接口必须实现接口所有的抽象方法,否则这个类也是一个抽象类

区别:

两个方面:

  • 语法层面上的区别
    • 抽象类中可以有方法实现,而接口中只能存在抽象方法( java 8后新增默认风法);
    • 抽象类中的成员变量可以是各种类型的,而接口中的只有公共静态常量public static final
    • 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块静态方法
    • 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
    • 抽象类也可以实现接口,接口只能继承接口
  • 设计层面上:
    • 抽象类是对一种事物的抽象,即对的抽象,而接口是对行为的抽象,抽象类是对类的整体进行抽象,包括类的属性、行为,而接口是对类的局部行为进行抽象
    • 个人理解:抽象类是将一部分共同的属性和行为,抽象成一个整体,这一个整体下的个体必定具备一部分相同的属性和行为,只在单个个体下有一定差异,例如:动物是一个大类,人和熊都有四肢、内脏属性以及吃饭、睡觉的行为,但是,人吃熟肉,熊吃生肉,在吃饭这一行为的具体实施上就有所差异。而接口就是将一些事物共有的行为抽取出来,不同的对象对该行为都有不同的解释。
    • 简单点说,抽象类就是对一类 的抽象,而接口则是一个或一类类应当具有的方法
    • 抽象类作为很多类的父类,是一种模板式设计,而接口则是一种行为规范,属于辐射式设计。

猜你喜欢

转载自blog.csdn.net/weixin_42239793/article/details/107762878
今日推荐