• 基类转换为子类的 目前知道的情况 (一种)




    package cn.com.hanbinit.test; /** * 检验父类是否可以强转为子类 * @author icer * */ public class ConvertPro extends Father { public static void main(String[] args) { Father father = new Father(); Father father1 = new ConvertPro(); ConvertPro son = new ConvertPro(); // ConvertPro son1 = (ConvertPro) new Father(); // son = (ConvertPro)father; son = (ConvertPro) father1; } } /** * 父类 * * @author icer * */ class Father { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
    复制代码

    上面代码注释掉的两行是会运行错误的. 根据代码显示,  只有我们的父类对象本身就是用子类new出来的时候, 才可以在将来被强制转换为子类对象.

    子类继承父类的所有(包括属性以及方法), 也就是说子类包含的内容应该是比父类要大的. 如果正常环境下, 把一个父类转换成子类一定会损失精度.  但是如果父类对象本身就是用

    子类去new出来的, 就类似于一个本来就是儿子角色的人, 去装了一会儿父亲, 这个角色是可以在未来转换回去的, 但是一个父亲, 永远不可能去装儿子的.

    另一个例子:

    前提是:此父类对象为子类对象强转的结果 例如:
      Father father = (Father)son;
    当这种情况时,可以用instanceof判断是否是子类类型(实际) 然后强转回去
      if(father instanceof Son)
      Son son =(Son)father;
    除此之外,不行。

    public class Test {

    public static void main(String[] args) {
    Person person = new Boy();    //可以看到这边父类的引用指向子类
    Boy boy = (Boy) person;
    boy.eat();
    }

    }

    class Person {
    public void eat() {
    System.out.println("The people were eating");
    }
    }

    class Boy extends Person {
    public void eat() {
    System.out.println("The boy were eating");
    }
    }

  • 相关阅读:
    MFC单文档框架分析及执行流程(转)
    MFC不同工程(解决方案)之间对话框资源的复制与重用方法(转)
    【DLL】动态库的创建,隐式加载和显式加载(转)
    H264协议(转)
    YUV颜色编码解析(转)
    windows下常用快捷键(转)
    【Sqlite3】SQLITE3使用总结(转)
    C++11 自动释放锁(转)
    alt+ F8 设置无效(转)
    Invalidate()(转)
  • 原文地址:https://www.cnblogs.com/jiangyi666/p/5754446.html
Copyright © 2020-2023  润新知