相同:
1.不能够实例化
2.可以将抽象类和接口类型作为引用类型
3.一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要
被声明为抽象类
语法上的不同:
抽象类:
1.抽象类中可以定义构造器
2.可以有抽象方法和具体方法
3.抽象类中的成员可以是 private、默认、protected、public
4.抽象类中可以定义成员变量
5.有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法
6.抽象类中可以包含静态方法
7.一个类只能继承一个抽象类
接口:
1.接口中不能定义构造器2.方法全部都是抽象方法
3.接口中的成员全都是public的
4.接口中定义的成员变量实际上都是常量
5.接口中不能有静态方法
6.一个类可以实现多个接口
语义上的不同(什么时候用抽象类或接口):
抽象类:现实中有这种抽象的概念,比如说“动物”;
狗是一种动物,燕子是一种动物;动物用抽象类
接口:某些事物之间的共同特性或行为,比如说“flyable(会飞的)”
燕子会飞、老鹰会飞;“会飞的”用接口
抽象类是为了复用,接口是为了规范行为