从类的角度:抽象类 abstract class 只能有一个父类 接口interface可以有多个父接口
修饰符只能是public或default
从内部属性的角度:
抽象类属性默认default。接口属性默认是public static final修饰
从内部方法的角度
抽象类中可以定义构造方法(注意不能实例化),抽象方法,普通方法
在这里 需要了解抽象类构造方法的作用:
(1)初始化抽象类内部声明的通用变量,并被各种实现使用。
(2)即使你没有提供任何构造函数,编译器将为抽象类添加默认的无参数的构造函数,没有的话你的子类将无法编译,因为在任何构造函数中的第一条语句隐式调用super(),Java中默认超类的构造函数。
(3)抽象类不能创建对象不调用构造函数,但是抽象类的子类调用父类的构造函数,抽象类做父类可以写构造函数供子类调用。
接口中不能定义构造方法 方法全部都是抽象方法(可以省略abstract关键字)
构造函数在创建对象时调用,接口不能创建对象,接口的子接口不能创建对象,接口的实现类不会调用接口的构造方法,所以不用写构造函数。
从应用的角度
多态--抽象父引用指向子类,调用父类声明的方法和属性,不能调用子类特有的,其中,子类重写了调用子类方法,没重写调用父类的方法。
接口引用指向实现类,调用父类声明的方法和属性,不能调用子类特有的,调用方法时,调用实现类中的方法。
抽象类定义子类的公共方法,接口中定义多个无关类的公共方法。
如(OnOff定义开关方法,实现类可以是窗户电脑等,这两个实现类毫无关系。)
(Person类定义work方法,定义所有人的抽象方法work,使用这个方法,必须是Person类的子类,必须和Person有父子关系。)