您的位置:首页 > 编程语言 > Java开发

多态,前提,特点,好处,弊端

2016-06-28 19:24 225 查看
<pre name="code" class="java">class Animal {
public void eat() {}
}

class Dog extends Animal {
public void eat() {
System.out.println("Dog eat");
}
}

class Cat extends Animal {
public void eat() {
System.out.println("Cat eat");
}

public void play() {
System.out.println("猫捉迷藏");
}
}

class DuoTaiDemo7 {
public static void main(String[] args) {
Animal a = new Dog(); //向上转型
a.eat();

a = new Cat(); //向上转型
a.eat();
//报错
//a.play();

//创建子类对象
//Cat c = new Cat();
//c.play();
Cat c = (Cat)a; //<span style="color:#ff0000;"><strong>向下转型---->为了调用子有父没有(cat有animal没有)的方法。此题为了c.play()</strong></span>
c.eat();
c.play();

//ClassCastException:类型不匹配
a = new Dog();
Dog d = (Dog)a;
a.eat();

}
}


<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">多态:对象在不同时刻表现出来的多种状态。</span>

举例:

水(水蒸气,冰,水)

动物和狗。

动物是动物,

动物是狗。

狗是狗。

狗是动物。

Java代码的体现:

多态的前提:

多态的前提:

A:要有继承或者实现关系。

B:要有方法的重写。

没有方法重写,继承抽象类,或者实现接口,没有意义。

C:要有父类(父接口)引用指向子类对象。

*/

/*

多态:

编译和运行的状态不一致。
******* !!!!注意:这些自我总结是针对多态的,平时的简单继承,还是先找子类再找父类!!!!*****

Fu f = new Fu(); //

Zi z = new Zi(); __________________________________//_____________________________________________________________________

| |

多态的成员特点:
| |

成员变量:--------------------|--------->只找父类;若是方法中的成员变量,先找此方法所在的(子//父)类中是否有,|

编译看左边,运行看左边。 | _ (有则用,无则看父有没有//有则用,无则报错,不能逆向去找子类了)|

成员方法(要求是重写): | | 先找子类,再找父类。(方法中嵌套方法,也是先找子类再找父类) |

编译看左边,运行看右边。--|----------| 既然成员方法重写了,肯定依照重写的来(重写肯定指的是子类的方法),所以看右边。|

| |_ 不重写,就不符合多态了,依照原方法来,即在左边了。|

静态成员方法:
| |

编译看左边,运行看左边。--|--------->只找父类。。静态是与类相关,而不是对象。|

| |

为什么呢? |_________________________________________________________________________________________________________|

因为方法有重写,而变量没有。

*/

/*

多态的好处:

A:维护性(是有继承保证)

B:扩展性(当你不知道将来使用哪个子类的时候,那么,就把这里传递父类的引用。这个时候,你将来不管传递哪个子类,我都可以接收)

弊端:

不能使用子类的特有功能。

多态的弊端:

不能使用子类的特有功能。

我就要使用,怎么办呢?

A:创建子类对象。可以解决,但是不合理。

B:多态中的转型问题

a:向上转型

从小到大。Dog,Cat - Animal

b:向下转型

从大到小。Animal -- Dog,Cat

必须加强制类型转换。

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息