生动理解多态中向上与向下转型
代码如下:
1 package cn.finall.com; 2 3 class Fu{ 4 public void show() { 5 System.out.println("显示父类"); 6 } 7 } 8 9 class Zi extends Fu{ 10 public void show() { 11 System.out.println("显示子类"); 12 } 13 14 public void method() { 15 System.out.println("显示子方法"); 16 } 17 18 } 19 20 public class DemoTest { 21 public static void main(String[] args) { 22 Fu f = new Zi(); //这个Zi 是子类型,现在外界看到的是 Fu,这个就叫向上转型 23 f.show(); //引用了子对象,所以优先显示子方法 24 Zi z = (Zi)f; //本来外界之前看到是的Fu类型,现在又被Zi强制转换引用向外体现,这就叫作向下转型,这样一来就可以使用Zi类的特有方法 25 z.show(); //这是父类和子类都有的方法,子类会重写父类方法,所以看到的结果就是子类中的结果 26 z.method(); //这个是子类特有的方法,通过上面的向下转型就间接的可以直接访问子类的特有方法 27 28 } 29 30 } 31 32 运行结果如下: 33 显示子类 34 显示子类 35 显示子方法
简单说明:多态的一个缺陷是不能直接访问子类中的特有方法(特有方法就是指:子类有的方法但父类没有)
多态的向上与向下转型,必须要同时满足下面几个条件:
1、必须有继承,继承是多态的基础
2、必须是
父类 父变量名 = new 子类名;
子类名 子变量名 = (子类名)父变量名;
通俗理解上面这两句:就是相当于是把一个苹果(子类)从左口袋通过手(父类)放到右口袋,苹果并没有变。