Java中抽象类和接口的区别总结
一个类只能extends
一个抽象类,但可以implements
多个接口。
抽象类Abstract Class:
- 只要用
abstract
关键字声明的类就叫抽象类,抽象类可以和普通类一模一样,可以不包含抽象方法,但是如果一个类包含了抽象方法,一定要声明成抽象类。 - 抽象类不可以被实例化,即抽象类不可以
new
对象,如果用一个抽象类new
对象,编译器会报错:Class is abstract; cannot be instantiated
。但是抽象类中可以有构造函数,如果抽象类中包含main
方法的话是可以被调用的。 - 抽象方法中不能包含方法体。
- 抽象类可以包含非
final
类型的变量。 - 抽象类的成员函数可以是
private
、protected
或者public
。 - 抽象类子类,如果不是抽象类,就必须实现抽象父类的所有抽象方法。
- 抽象类和类一样只能单继承
extends
,但可以多实现implements
。 - 抽象类中可以有静态代码块。
接口Interface:
- 接口不能被实例化,即不能
new
对象。 - 接口没有构造方法,而且接口中所有方法必须都是抽象方法。
- 接口中的变量默认都是
public static final
类型的,即默认都是常量,不能是其他类型。 - 接口中的方法默认的是
public abstract
类型的,即都是抽象方法,不能是其他类型。 - 接口支持多继承,即
extends
关键字后可以跟多个接口(只能是接口不能是类)。 - 接口中不能有静态代码块。