2017-02-19 42 views
-1

比方說,我有一段代碼:將子類的構造函數提供給父類的對象有什麼意義?

class one 
{ 
    String one = "First"; 
} 
class sec extends one 
{ 
    String sec = "Second"; 
} 
class num 
{ 
    public static void main(String[] args) 
    { 
    one o = new one(); 
    sec s = new sec(); 
    one oo = new sec(); 

    // the object will be of that class for which we are providing the reference 

    // then what is the use of the constructor 

    sec s = new one(); // this is not working 

    System.out.println(o.one); 
    System.out.println(s.sec); 
    System.out.println(oo.one); # this seems right 
    System.out.println(oo.sec); # this is not working 

    } 
} 

我被參考和構造函數在創建對象混淆。 我已將sec類擴展爲從類one繼承。 我得到了我們引用one類的前兩個對象創建的含義,併爲第二個對象創建了相同的對象。

但是第三個對象呢?我們正在使用第一類的引用並提供子類的構造函數,我可以使用第三個對象(oo)來引用一個類的變量和方法而不是第二類。

如果我必須使用一個類的方法和變量,那麼我可以將它與對象(o)而不是對象(oo)一起使用。那麼當兩個對象表現得像對方一樣時,兩個對象之間有什麼區別呢?

one o = new one(); 
one oo = new sec(); 

我想知道這兩個是什麼改變來當我們使用子類的構造函數,而不是基類之間的差異。

+0

好的,我會看到謝謝先生:-) – babygame0ver

+0

肯定會看看多態性。這也不是JAVA特有的。對於任何OOP你都會很有用。 – Tom

+0

@AkshaySingh在發佈新問題之前,請在網站上搜索所有未來的問題。有可能你的問題已經被回答了。 – CKing

回答

0

這實際上是一個着名的討論話題。

首先有兩件事被稱爲object & reference

對象表示您的實際圖片或實際數據。

引用表示您的對象視圖。

在數據庫方面,您可以比較對象爲表格&參考爲視圖。

假設我們有三維圓柱體類型的物體,當您從頂部看它時,它看起來像圓形&,它看起來像方形(這裏我說的是相同的條件),但它實際上既不是圓形也不是方形。

這裏的實際物體是你的圓柱體&你從不同角度看到的圖像是你的參考。

現在回到實際問題。

當你寫one o = new one()它是一個引用(視)爲一個的實際對象。

現在,當你寫one po = new two()它是兩個實際的對象,被引用爲兩個。這裏存在着在第二類中定義的對象的所有組件。儘管由於參考類型您無法訪問它們,但它們是存在的。

要知道實際差異讓我們討論一下當你編寫這樣的代碼時會發生什麼。

two t=(two)otwo tt=(two)oo

在第一種情況下的Java拋出異常ClassCastException。在第二種情況下,你是被允許的。

在你的對象ootwo型的第二種情況下,這裏的二類繼承one類的屬性,所以你可以把它當作one類的對象。但在第一種情況下,你不能因爲同樣的原因。

這樣做的主要原因是因爲我們在處理對象時並不關心對象的所有屬性。

例如,當你應該設計代碼發送郵件到一些人的列表。現在想想你真正需要完成這項任務嗎?只有電子郵件ID .. 你其實並不在意其他細節,這些細節顯然存在於人的對象中。現在你用方法getEmail定義一個名爲Email的類(實際上它應該是接口)&你制定了約束條件,即每個人現在都必須擴展這個類人的每個對象都包含屬性郵件,雖然它可以包含其他屬性但你不必關心這一點。

相關問題