zoukankan      html  css  js  c++  java
  • 向上转型,向下转型

      有两个类, 父类 Father, 子类 Son

    向上转型

      把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转换

      父类引用 f1 指向 子类对象

    Father f1 = new Son();

    向下转型

       当用父类变量指向子类类型的时候,变量只有父类的方法而不能调用子类的方法,若想调用子类的方法就要把父类变量转换为子类变量(向下转型)

       把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转换   

      f1 指向 Son对象,f1 前面的(Son)必须加上,进行强制转换。这里向下转型是安全的 a1 指向的是子类对象

    Father f1 = new Son();
    Son s1 = (Son)f1;

      不安全的向下转型,编译无错但会运行会出错

      当父类变量转换为一个与真实对象不相符的子类变量的时候,就会抛出ClassCastException,所以向下转型是不安全的,

      正确的做法是在强制类型转换之前先使用 Instance of关键字进行判断转型后的类型和真实对象的类型是否一致,一致才执行类型转换操作;

    Father a2=new Son();
    Son c=(Son)a2;

      运行出错

    Exception in thread "main" java.lang.ClassCastException:

      

  • 相关阅读:
    杜教筛学习笔记
    Dirichlet 卷积学习笔记
    洛谷 [POI2007]BIU-Offices 解题报告
    NOIP 2018 游记
    洛谷 P4964 绫小路的特别考试 解题报告
    洛谷 P4597 序列sequence 解题报告
    洛谷 P2757 [国家集训队]等差子序列 解题报告
    对答案 解题报告
    multimap-find
    multimap-insert
  • 原文地址:https://www.cnblogs.com/Jomini/p/13872904.html
Copyright © 2011-2022 走看看