zoukankan      html  css  js  c++  java
  • [java]Java中父类强制转换成子类的原则

    Java中父类强制转换成子类的原则:父类型的引用指向的是哪个子类的实例,就能转换成哪个子类的引用。

    例:

    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");
     }
    }
    

    打印结果:The boy were eating

    原因:当Boy实例化后将引用地址返回传给person,这时person引用实际指向的是Boy,所以将person转换成Boy能成功。

    再定义一个类:

    class Girl extends Person {
     public void eat() {
      System.out.println("The girl were eating");
     }
    }
    
    main方法中添加:
    
      Person p = new Girl();
      Boy b = (Boy)p;
      b.eat();
    

    运行时提示:Girl cannot be cast to Boy(不能将女孩转换成男孩)

    原因:当Girl实例化后将引用地址返回传给p,这时p引用实际指向的是Girl,将p转换成Boy也就是说将Girl转换成Boy,肯定不能成功。

    上面的例子换句话来说,男孩和女孩都是人这肯定是对的,但你要说女孩是男孩肯定是不对的。

    父类转子类的前提是:此父类对象为子类对象的引用

    例如:

      Father father = (Father)son;
    当这种情况时,可以用instanceof判断是否是子类类型(实际) 然后强转回去
      if(father instanceof Son)
         Son son =(Son)father;
    

    除此之外,不行。

  • 相关阅读:
    eclipse- DDMS截图功能使用
    宏-新项目物理按键不能用
    宏-宏的添加跟代码中的使用
    SQlite-数据库的访问实例(转)
    git 工具的使用总结(6)-提交合并处理
    git 工具的使用总结(5)-查看历史记录
    git -处理分支合并
    Linux查询网址
    SQLite常用网址
    Java查询网址
  • 原文地址:https://www.cnblogs.com/iiiiiher/p/12687642.html
Copyright © 2011-2022 走看看