Java抽象类和接口的区别

Java中抽象类和接口的区别总结

一个类只能extends一个抽象类,但可以implements多个接口。

抽象类Abstract Class:

  1. 只要用abstract关键字声明的类就叫抽象类,抽象类可以和普通类一模一样,可以不包含抽象方法,但是如果一个类包含了抽象方法,一定要声明成抽象类。
  2. 抽象类不可以被实例化,即抽象类不可以new对象,如果用一个抽象类new对象,编译器会报错:Class is abstract; cannot be instantiated。但是抽象类中可以有构造函数,如果抽象类中包含main方法的话是可以被调用的。
  3. 抽象方法中不能包含方法体。
  4. 抽象类可以包含非final类型的变量。
  5. 抽象类的成员函数可以是privateprotected或者public
  6. 抽象类子类,如果不是抽象类,就必须实现抽象父类的所有抽象方法。
  7. 抽象类和类一样只能单继承extends,但可以多实现implements
  8. 抽象类中可以有静态代码块。

接口Interface:

  1. 接口不能被实例化,即不能new对象。
  2. 接口没有构造方法,而且接口中所有方法必须都是抽象方法。
  3. 接口中的变量默认都是public static final类型的,即默认都是常量,不能是其他类型。
  4. 接口中的方法默认的是public abstract类型的,即都是抽象方法,不能是其他类型。
  5. 接口支持多继承,即extends关键字后可以跟多个接口(只能是接口不能是类)。
  6. 接口中不能有静态代码块。