【问题标题】:Polymorphism and casting object in JavaJava中的多态性和转换对象
【发布时间】:2021-12-12 09:35:34
【问题描述】:

是否有可能将 o1 或 o2 转换为 A 并且程序将运行?为什么最后一条语句是运行时错误?

public class A{
    public A(Object object)
    {
    
    }
    public A(){
    
    }
    public String toString(){
        return "A";
    }
}

  public class Main{
      public static void main(String []args){

          A a4 = new A();
          Object o1 = new Object();
          Object o2 = new A(o1);
    
          a4 = o1; //Compilation error
          o2 = o1;
          ((A)o1).toString();//Runtime error
          a4.toString();
          ((A)o2).toString();//Runtime error
}

}

【问题讨论】:

    标签: java casting polymorphism downcast


    【解决方案1】:

    是否有可能将 o1 或 o2 转换为 A ? 这取决于您何时尝试进行演员表。

          A a4 = new A();
          Object o1 = new Object();
          Object o2 = new A(o1);
    
           // o2 CAN be cast to A here
    
          o2 = o1;
    
          // o2 now CANNOT be cast to A here, since it is now referencing an object of type Object, not of type A
    

    最后一条语句是错误的,因为强制转换:

        (A)o2
    

    是运行时错误,因为此时 o2 引用的是 Object,而不是 A。
    请注意,这不可能是编译错误,因为语言的语法意味着 Object 类型的变量可能正在引用 A 类型的对象(因此强制转换可能是有效的)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      相关资源
      最近更新 更多