抽象类和接口有什么区别?

1)抽象类中可以定义构造函数,接口不能定义构造函数;

(2)抽象类中可以有抽象方法和具体方法,而接口中只能有抽象方法(public abstract);

(3)抽象类中的成员权限可以是 public、默认、protected(抽象类中抽象方法就是为了重写,所以不能被 private 修饰),而接口中的成员只可以是 public(方法默认:public abstrat、成员变量默认:public static final);

(4)抽象类中可以包含静态方法,而接口中不可以包含静态方法;

JDK 8 中的改变

1、在 JDK1.8中,允许在接口中包含带有具体实现的方法,使用 default 修饰,这类方法就是默认方法。

2、抽象类中可以包含静态方法,在 JDK1.8 之前接口中不能包含静态方法,JDK1.8 以后可以包含。之前不能包含是因为,接口不可以实现方法,只可以定义方法,所以不能使用静态方法(因为静态方法必须实现)。现在可以包含了,只能直接用接口调用静态方法。JDK1.8 仍然不可以包含静态代码块。

2 评论

  1. 抽象类:
    1可以定义构造方法
    2成员属性可使用任意修饰符修饰
    3成员方法可使用public(默认)、default、protected修饰
    4类名使用abstract修饰

    接口:
    1无构造方法
    2成员属性一律使用private static final修饰
    3成员方法一律使用public abstract修饰
    4类名使用interface修饰
    新特性
    java8开始接口可default修饰符定义默认方法和定义static修饰的静态方法
    java9开始接口可定义私有方法

  2. 抽象类:
    1可以定义构造方法
    2成员属性可使用任意修饰符修饰
    3成员方法可使用public(默认)、default、protected、static修饰(不能与abstract同用)
    4类名使用abstract修饰

    接口:
    1无构造方法
    2成员属性一律使用private static final修饰
    3成员方法一律使用public abstract修饰
    4类名使用interface修饰
    新特性
    java8开始接口可default修饰符定义默认方法和定义static修饰的静态方法
    java9开始接口可定义私有方法

发表评论