2017-03-12 52 views
0

我們被問到是否可能有一個與其父類有關聯的子類,並且它是否有意義。子類可以與其父類關聯嗎?

我做我自己的例子,如:

class CompanyPerson{} 

class Boss extends CompanyPerson{} 

class Employee extends CompanyPerson{ 
    CompanyPerson boss; 
} 

我明白,這工作,我也嘗試過Eclipse的,而事實上,它的工作原理。但是我不明白的是,爲什麼我需要這種關聯而不是在我的Employee類中擁有Boss屬性。

當然,因爲我沒有關於面向對象編程的廣泛看法,但在這種情況下,我看不到它的重點。

回答

1

關聯'CompanyPerson'而不是'Boss'的好處是,如果您曾經引入第三種類型的CompanyPerson(例如Manager),您將能夠將其指定爲您的老闆,而無需更改您的單一行現有的代碼。

這是一個很好的做法,始終讓您的代碼可以擴展。在這方面,你可以擁有的SOLID原則

+0

謝謝,我正在關注這個例子,但是的確如果我有更多的類,如你所說,讓它們的限制更少是有用的。我還會檢查SOLID原則以更好地理解oop。 – Jordi

+0

你並不總是希望你的課程具有可擴展性。 Joshua Bloch建議:「爲繼承設計或者禁止它。」 (__有效的Java_)我認爲人們應該更喜歡「禁止它」。 –

0

首先簡要閱讀,你是完全正確的:Boss類型的變量是在這個特殊的例子更有意義。我只是把它稱爲Supervisor,以更好地表達兩者之間的關係,但這與現在的觀點不同。

但是,我認爲你被要求的合同有點奇怪的措辭。誤解可能存在於單詞關聯中。正如您正確猜測的那樣,在類的實例之間建立了關聯,但合同明確要求在子類和父類之間建立關聯。

所以你實際上在尋找的是同一個實例上的子類和父類之間的關聯。換句話說,如果有一個Employee類型的實例,它是否與CompanyPerson?類型有關聯。

相關問題