final关键字
1.它修饰的类无法继承
2.它修饰的类无法覆盖
3.它修饰的变量只能赋一次值
4.他修饰的引用一旦指向某个对象,则不能再重新指向其他对象,但该引用指向的对象内部的数据是可以修改的。
5.他修饰的实例变量必须手动初始化,不能采用系统默认赋值
6.它修饰的实例变量一般个static联合使用,称为常量。
抽象类
类到对象是实例化。对象到类是抽象。
1.mean?
类和类之间具有共同特征,将这些共同特征提取出来,形成的就是抽象类。类本身不存在,所以抽象类无法创建对象。(无法实例化)
2.它属于引用数据类型
3.how to define?
[修饰符列表] abstract class 类名{类体; }
4.抽象类是无法实例化,无法创建对象,所以它是用来被子类继承的。
5.final和abstract不能联合使用,是对立的
6.抽象类的子类可以是抽象类,也可是非抽象类
7.抽象类虽然无实例方法,但是抽象类有构造方法,这个构造方法供子类使用
8.抽象方法表示没有实现的方法,没有方法体的方法。如何定义呢? :
public abstract void move ();
9.一个非抽象的类,继承抽象类,必须将抽象类中的抽象方法进行覆盖/重写/实现。
注:
问。JAVA语言中凡是没有方法体的方法都是抽象方法?
答。错的。Object类中就有很多方法都没有方法体,都是以 ; 结尾的,但他们不是抽象方法。比如
: public native int hashCode();
这个方法底层调用了c++写的动态链接库程序。
前面修饰符列表中没有abstract,有native,表示调用jvm本地程序。
接口
1.是引用数据类型
2.是完全抽象的
3.定义: [修饰符列表]interface 接口名{ }
4.支持多继承
5.接口中只用常量+抽象方法
6.中的所有元素都是public修饰的
7.中的抽象方法的public abstract 可以省略
8.中常量的 public static final 可以省略
9.中方法不能有方法体
10.一个非抽象的类,实现接口时,必须将接口中所有的方法加一实现。
11.一个类可以实现多个接口
12.extends和implements可以共存,前者在前,后者在后
13.接口在开发中的作用?
注意:接口在开发中的作用,类似于多态在开发中的作用。
多态:面向抽象编程,不要面向具体编程。降低程序的耦合度。提高程序的扩展力。
/*
public void feed(Dog d){ }
public void feed (Cat c){ }
如果还要再养一个宠物的话,就要再加一个方法,扩展力差
/
/
public void feed(Animal a){ }
面向Animal父类编程,父类是比子类更抽象的。叫面向抽象编程,不是面向具体编程。这样扩展力强
*/
面向抽象编程==面向接口编程,有接口就有插拔,可插拔表示扩展力很强(低耦合度),不是直接焊死的。
接口+多态才可以达到降低耦合度
类型和类型之间的关系
- is a(继承),Cat is a Animal extends
2.has a (关联) ,I has a Pen A{ B b;} - like a (实现),Cooker like a FoodMenu implements
抽象类和接口的区别
1.抽象类是半抽象的,接口是完全抽象的
2.抽象类中有构造方法,接口中没有
3.接口和接口之间支持多继承。类和类之间只能单继承。
4.一个类可以同时实现多个接口,一个抽象类只能继承一个类(单继承)。