相同点: 都不能被实例化。
不同点:
(1)抽象类中可以有方法的实现,可以有抽象方法,也可以没有抽象方法;
接口:在 Java 8 之前,不能有方法的实现,只能有抽象方法;
从 Java 8 开始,可以拥有默认的方法实现,这是因为不支持默认方法的接口的维护成本太高了。
public interface InterfaceExample {
void func1();
default void func2(){
System.out.println("func2");
}
int x = 123;
public int z = 0;
}
(2)接口强调实现,抽象类强调继承;一个类只能继承一个抽象类,但可以实现多个接口;
(3)接口中的成员(变量+方法)默认是 public 修饰的,抽象类没有这种规定;
(4)接口中的成员变量默认是static 和 final 的,抽象类没有这种限制;
(5)抽象类和子类像是 is-a 的关系,抽象类像是一种模板;接口和子类像是 like-a 的关系,接口像是一种规范。



