java 子類與父類 轉換

來源:互聯網
上載者:User

父類對象不能強轉為子類對象,子類可以轉為父類。
能轉,是因為它確實是。
不能轉,是因為它不是。

----------------------------------------------------------------------

B extends A

A a = new B();   
B b = (B)a;

這裡的new B()本身就是子類的對象,只是使用了父類的引用a指向它!

class A   

{   
    public void print()   
    {   
 
System.out.println("A.func1");   
    }   
}  

 
class B extends A   
{   
     public void print()   
    {   
 
System.out.println("B.func1");   
     }   
}   

   子類可以以父類的身份出現( A a=new B();)但做事情時還是按自己的方法做:a.func1()輸出的結果是"B.func1"
   父類不可以以子類身份出現(B b=new A();),因為會報向下轉型異常.

  Java的強制轉換是用在當子類對象上傳給父類後,需要重新擷取子類對象時,使用下傳,將對象強制裝換成子類對象。也就是說原先的對象最開始就是子類的,只是在上傳的時候丟失了具體的類型。

  現在你想將父類的對象轉換成子類的對象,這是不可能的,在每個類中都有一個Class類,來存放每個類的具體資訊,這樣保證類在上傳和下傳時都能找到最原始的類。
  Structs裡面ActionFrom中真正傳入的是子類的對象,只是把它上傳給了一個父類的引用,所以這個對象的Class類存放的是子類的資訊,強制轉換成子類,當然是可以的。就像是:Father a = new Son();Son b = (Son)a;

  而如果是你現在是想把Father a = new Father();Son b = (Son)a;這是完全不同的,前者Class中存放的是子類的資訊(包括一些方法、變數和塊),後者存放的是父類的資訊。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.