多态使用的细节和注意事项
面向对象编程-多态
多态注意事项和细节讨论
com.hspedu.poly_.detail_ 包: PolyDetail.java
多态的前提是:两个对象(类)存在继承关系
多态的向上转型
1)本质:父类的引用指向了子类的对象
2)语法:父类类型 引用名=new子类类型();
3)特点:编译类型看左边,运行类型看右边。
可以调用父类中的所有成员(需遵守访问权限),不能调用子类中特有成员;
最终运行效果看子类的具体实现!
1 //向上转型:父类的引用指向子类的对象 2 //语法:父类类型 引用名 = new 子类类型() 3 Animal animal = new cat(); 4 //看输出结果 5 /** 6 * 向上转型调用方法的规则如下 7 * 1.可以调用父类中的成员(方法和属性),但是要遵循访问权限 8 * 2.但是不能调用子类的特有的成员 9 * 3.在编译阶段,能调用哪些成员,由编译类型来决定的 10 * 4.运行时,看animal(引用名) 的运行类型,现在animal的运行类型是子类cat 11 * 所以会先去查找子类cat是否有animal后面调用的对象,如果子类有就输出 12 * 没有就往上转型(父类)查找 13 */ 14 animal.eat();//输出猫在吃鱼... 15 animal.cry();//cat cry()小猫在叫唤... 16 animal.run();//在跑步..... 17 animal.Sleep();//在睡觉..... 18 19 }
多态的向下转型
1)语法:子类类型引用名=(子类类型)父类引用;
2)只能强转父类的引用,不能强转父类的对象
3)要求父类的引用必须指向的是当前目标类型的对象
4)当向下转型后,可以调用子类类型中所有的成员
1 //向下转型的规则: 2 /** 3 animal.catchMouse()//出现错误:由于抓老鼠是猫特有的属性,所以向上转型无法调用 4 * 那该如何去调用抓老鼠这个方法呢?就需要进行向下转型; 5 * 对猫进行向下转型,把animal这个父类所指向的cat子类向下转换为cat类型 6 * 1)语法:子类类型 引用名=(子类类型)父类引用; 7 * 注意:在进行向下转型时,要求父类的引用必须指向当前目标类型的对象 8 * (这里也就是说:想要把animal这个父类所指向的cat子类向下转换为cat类型的前提) 9 * (前提是之前的animal这个父类引用名指向的是cat) 10 */ 11 cat cat01 = (cat) animal; 12 cat01.catchMouse();//结果输出猫抓老鼠;
属性没有重写的说法,属性的值看编译类型
instance Of 比较操作符,用于判断对象的运行类型是否为XX类型或XX类型的子类型【举
例说明】
1 package com.polymorhic; 2 3 public class dome { 4 public static void main(String[] args) { 5 6 BB bb = new BB(); 7 System.out.println(bb instanceof BB);//true 8 System.out.println(bb instanceof AA);//true 9 10 // AA aa = new AA(); 11 // System.out.println(aa instanceof BB);//flase 12 // System.out.println(aa instanceof AA);//true 13 //aa编译类型是AA.运行类型是BB 14 AA aa = new BB(); 15 System.out.println(aa instanceof AA);//true 16 System.out.println(aa instanceof BB);//true 17 18 } 19 } 20 21 class AA{} 22 class BB extends AA{}
想多了都是问题,做多了才是答案

浙公网安备 33010602011771号