zoukankan      html  css  js  c++  java
  • 生动理解多态中向上与向下转型

    代码如下:

     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 子类名;

        子类名 子变量名 = (子类名)父变量名;

        通俗理解上面这两句:就是相当于是把一个苹果(子类)从左口袋通过手(父类)放到右口袋,苹果并没有变。

  • 相关阅读:
    BZOJ 2724: [Violet 6]蒲公英
    codeforces Lightsabers (hard)
    BZOJ 3884: 上帝与集合的正确用法
    BZOJ 4809: 皇后
    python的变量类型(Day6)
    Python集合方法整理(Day9)
    基本运算符与流程控制(Day5)
    基本数据类型(Day4)
    第一个Python程序(Day3)
    操作系统(Day2.5)
  • 原文地址:https://www.cnblogs.com/aziji/p/10118410.html
Copyright © 2011-2022 走看看