Java学习回忆录-基础理论-013
多态(提高了可扩展性)
一个事物,在不同的状态下,体现不同的形态… 这种情况称之为多态…
只跟成员方法有关系,还是子类重写了父类的这样的成员方法有关系…
1. 前提
- 子类继承父类 ->extends
- 子类重写父类的方法 ->override
2. 体现
-
创建子类对象. 使用父类类型接收.
Fu fu=new Zi();
-
使用父类类型(fu)是调用子父类中都存在的方法(子类重写父类这个方法). 执行的的是子类的方法。
clasa Fu{ public void test1(){ syso("fu"); } } class Son extends Fu{ @Override public void test1(){ syso("zi"); } }
Fu fu=new Son(); // 做什么事情, 调用test1方法. fu.test1(); // 执行哪个? 执行的是子类的方法... 输出zi ...
// 集合中的多态 //ArrayList list=new ArrayList(); List list=new ArrayList(); // 这是多态... 就可以了, 因为多态应用广泛,一开能看懂, 看多了,自然就明白了...
多态成员特点:
成员变量
编译
系统看=左边 ,检查Animal an = 这个类中是否存在成员变量. 如果存在编译通过.
运行
系统还是看=左边, 就会去Animal an = 这个类Animal 中去找存在这个变量,并获取值.
成员变量跟多态没有关系...
成员方法(方法)
编译
系统看 =左边. 检查Animal an = 这个类中是否存在 这个方法. 如果存在编译通过.
如果这个类中不存在这个方法,编译直接就报错了...
运行
系统会看= 右边. 去= new Cat() 去执行,真正创建的的这个对象的方法. 所以执行的子类重写后的方法.
多态的弊端:
如果对象发生了多态现象. 使用父类类型的对象名接受了子类对象. 不能访问子类自己特有的属性(成员变量)和成员方法了
弊端. 多态下,无法访问子类自己特有的属性.
弊端, 多态下, 对象也无法访问子类自己特有的行为
如果就是需要使用导子类特有的属性和行为. 可以使用转型向下转型.变回来 (变形记)