抽象类与接口对比
相同点
定义类似
//抽象类
//抽象类的定义
public abstract class 类名 {}
//抽象方法的定义
public abstract void eat();
//接口
//接口的定义
public interface 接口名 {}
//类实现接口用implements表示
public class 类名 implements 接口名 {}
抽象类与接口均不能实例化,需要通过子类对象实例化
抽象类与接口的子类要么重写其中的所有方法,要么也是抽象类
不同点
成员变量
抽象类:可以是变量也可以是常量
接口:只能是常量,默认修饰符:public static final
构造方法
抽象类:空参构造,有参构造
接口:没有,因为接口主要是扩展功能的,而没有具体存在
成员方法
抽象类:抽象方法,普通方法
接口:只能是抽象方法,默认修饰符:public abstract
设计理念区别
抽象类:对类抽象,包括属性、行为
接口:对行为抽象,主要是行为
继承与实现
抽象类:单继承
接口:多实现
类与接口的关系:
-
类与类的关系
继承关系,只能单继承,但是可以多层继承
-
类与接口的关系
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
-
接口与接口的关系
继承关系,可以单继承,也可以多继承