十四、JAVA多态

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.静态函数:
编译运行都看左边
因为真正调用静态方法不需要对象的,直接类名使用,因为静态方法是绑定到类上的。

你可能感兴趣的:(十四、JAVA多态)