多态,前提,特点,好处,弊端
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
必须加强制类型转换。
*/
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树