簡體   English   中英

Java 中的多態性和鑄造 object

[英]Polymorphism and casting object in Java

是否有可能將 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
}

}

是否有可能將 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 類型的 object (因此強制轉換可能有效)

請提供您如何編寫 class A?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM