Java是单继承和多实现
参数 | 抽象类 | 接口 |
---|---|---|
声明 | 用abstract关键字声明 | 用interface关键字声明 |
实现 | 子类使用extends关键字来继承抽象类,如果子类不是抽象类的话,它需要提供抽象类中所有声明方法的实现 | 子类使用implements关键字来实现接口,它需要提供接口中所有声明方法的实现 |
构造器 | 可以有构造器 | 不能有构造器 |
访问修饰符 | 抽象类中的方法可以任意访问修饰符 | 接口方法默认修饰符是public,并且不允许定义为private或者protected |
多继承 | 一个类最多只能继承一个抽象类 | 一个类可以实现多个接口 |
字段声明 | 可以是任意的 | 默认都是static和final的 |
实例化 | 不能 | 不能 |
都位于继承的顶端,用于被其他实现或继承 都包含抽象方法,其子类都必须覆写这些抽象方法 |
||
用来捕捉子类的通用特性 | 是抽象方法的集合 |
|
设计层面 | 是对类的抽象,是一种模板设计 | 是行为的抽象,是一种行为的规范 |
表示含义 | 这个对象是什么(is a) | 这个对象能做什么(has) |
侧重于描述事务 | 侧重于定义功能 | |
属性 | 有普通属性,有静态属性(类属性) | 没有普通属性,只有静态属性,只能用public final static修饰 |
方法 | 有普通方法,可以定义静态方法,也可以没有抽象方法 | 没有方法体,默认使用public abstract修饰,不能定义静态方法 |
备注:Java8接口中引入默认方法和静态方法,以此来减少抽象类和接口之间的差异。
现在,可以为接口提供默认实现的方法了,并且不用强制子类来实现它。
接口和抽象类选择上,遵循这样的原则:
- 行为模型应该总是通过接口而不是抽象类定义,所以通常是优先选用接口,尽量少用抽象类。
- 选择抽象类:需要定义子类的行为,又要为子类提供通用的功能。
普通类和抽象类有哪些区别?
区别 | 抽象方法 | 实例化 |
---|---|---|
普通类 | 不包含 | 可以直接 |
抽象类 | 包含 | 不能 |
抽象类能使用final 修饰吗?
不能,
定义抽象类是让其他类继承的,如果定义为final 该类就不能被继承,这样彼此就会产生矛盾,所以final 不能修饰抽象类
抽象类必须要有抽象方法吗?
不需要,抽象类不一定非要有抽象方法。文章来源:https://www.toymoban.com/news/detail-456247.html
abstract class Cat{
public static void sayHi(){
System. out. println("hi~");
}
}
抽象类并没有抽象方法但完全可以正常运行文章来源地址https://www.toymoban.com/news/detail-456247.html
到了这里,关于抽象类和接口的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!