1.多态:多种形态,对象的多态性
class 动物{}
class 狗 extends 动物{ }
动物 x=new 狗( );//狗对象既是狗类型又是动物类型。
这就是多态,多态在程序中的体现:父类的引用或者接口的引用指向子类的对象。
2.多态:提供了代码的拓展性:
public static void method(Animal a)
{ a.eat(); }
当面对共性类型时,所有子类对象都能接受。
3.多态的弊端:不能使用子类的特有方法。
4.多态的前提:
A.必须要关系,继承、实现
B.通常有覆盖方法
Animal a= new Dog();//向上转型
向上转型的好处:隐藏了子类型,提高了代码扩展性。
弊端:只能使用父类功能,不能使用子类功能。
如果不需要面对子类型,通过提高扩展性或者使用父类的功能即可以完成操作,就是用向上转型。
6.如果想使用子类的特有功能呢?使用向下转型。(一定需要判断)
Dog d=(Dog)a; //向下转型
d.eat();
d.lookHome();//可以用了
7.向下转型的好处:可以使用子类型的特有功能。
弊端:面对具体的子类型,向下转型有风险,只要转换类型和对象类型不匹配就会发生ClasscastException。
8.所以想要安全就必须要判断,判断一个对象是否匹配一个类型。
使用关键字instanceof来判断: if(a instanceof Dog)
9子类方法覆盖了父类方法,则以子类为主。
10.接口作用:
后期每多一个设备就得多加一个功能,说明设备和笔记本的耦合性太强,需要解耦。
不要每次都面对具体的类型。只要定义一个规则,让后期的设备都符合这一个规则,这样只要面对规则就可以使设备都符合这一个规则,这样只要面对规则就可以了。JAVA中可以通过接口的形式来完成规则的定义,进行解耦。
(接口和public的需要写文档注释)
以下重要
多态中队成员的调用
A.成员变量:
无论编译与运行,都看等号左边的
Fu F=new fu();//看F的
B.成员函数:
编译看左边,运行看右边
C.静态函数:
编译运行都看左边
因为真正调用静态方法不需要对象的,直接类名使用,因为静态方法是绑定到类上的。