Java 8 之后接口和抽象类的比较
声明:此博文是因为我在百度上找了很多抽象类与接口的区别,发现都没有把Java 8的新特性描述好,所以自己百度总结了一下,如有遗漏,请私信!
相同点
- 都不能实例化
- 都包含为实现方法
- 子类都必须实现为实现方法
区别
- 抽象类用abstract定义,接口用interface定义
- 抽象类只能单继承,但可以多重继承,接口不仅可以多继承接口,还可以被多实现
- 抽象类可以包含任意多个有方法体的方法,但接口在Java 7之前是不允许的,Java 8允许有多个默认方法
- 抽象类可以有构造器,主要为了初始化,但不能自己调,只能是子类来调,接口没有构造器
- 抽象类的访问的访问修饰符可以是任意,但接口默认就是public,并且接口中的变量默认是 public static final修饰
- 抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法。
附
抽象类:
public abstract class Employee
{
private String name;
private String address;
private int number;
// 构造器
public Employee(String name,String address,int number){
this.name = name;
this.address= address;
this.number= number;
}
public abstract double computePay();
//其余代码
}
接口:
public interface IDemo {
// 默认方法,可以有多个
default void fun() {
System.out.println("Default method");
}
public static final Integer DEFAULT_VAR = 1;
// 抽象方法
public abstract void doGet();
}