相同点:
一个类如果继承某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现;如果一个抽象类继承某个抽象类或实现了某个接口可以选择对其中的抽象方法进行实现,也可以直接拥有。
不同点:
(1)抽象类可以定义构造器、可以有抽象方法和具体方法;接口不能定义构造器且方法全部是抽象方法。
(2)抽象类中的成员可以是 private、默认、protected、public;接口中的成员全部是 public 的。
(3)有抽象方法的类必须声明为抽象类,而抽象类可以没有抽象方法。
(4)一个类只能继承一个抽象类;但一个类可以实现多个接口。
(5)抽象类可以包含静态方法;接口中不能有静态方法。
(6)抽象类可以定义成员变量;接口中的变量都是常量;
(7)抽象类更多的是描述一个概念,比如动物、哺乳动物;植物、实物等,我们人类已经有概念的一般用抽象类;
接口更多的描述的是一种特征,比如 flyable,描述一类具有相同特征的,如蜻蜓、飞机、鸟都会飞,都可以实现 flyabe 接口。