抽象类
猫,狗都是动物,所以动物是一种抽象类。
需要狗、猫来分别对它进行特定的描述,才知道动物具体特征。
记住:
1:抽象类不能实例化。
2:抽象类是拿来继承的,所以不能用final修饰。
3:抽象类可以拥有普通方法,变量,常量。
4:子类可以继承抽象类的普通方法,也可重写抽象类的普通方法。
要实现所有的抽象方法。
5:abstract 不能与private、static、final或native并列修饰同一个方法。
接口
接口比抽象类还要抽象,间接实现java类的多继承
推荐继承和接口共同使用,因为这样既可以保证数据安全性又可以实现多继承。
记住:
1:接口不能实例化。
2:接口方法为public。
3:常量为public static final,必须初始化。
4:要实现所有的抽象方法。
两者差异
1:抽象类可以拥有任意范围的成员数据,也可拥有:非抽象方法,
但接口仅能够有静态、不能修改的成员数据(public static final),
同时接口所有的方法都必须是抽象的。
在某种程度上来说,接口是抽象类的特殊化。
2:抽象类是对类抽象,对整个类整体进行抽象,包括属性(数据)、行为(方法),
接口是对类行为(方法)进行抽象。
3:重点(跨域)
抽象类的子类是拥有相同特点的类,如猫会叫,狗会叫,都是动物 (is-a)
则动物可以抽象为一个抽象类,拥有一个行为为“叫”抽象方法供猫类。狗类重写。
而接口的实现。即鸟会飞,飞机会飞,两者无其他共同之处,(like-a)
即两者可以实现飞的接口,具有飞行功能。
4:抽象类是自底向上抽象而来的,接口是自顶向下设计。