4 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
您必須向 Product 類添加一個(gè)字段,該字段是 ProductFamily 類的對(duì)象。通過在 Product 類中添加方法 getProductFamily() ,您可以返回特定產(chǎn)品的產(chǎn)品系列。

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊
可能是這樣的,假設(shè)ProductFamily和Product類之間存在 1 對(duì) N 的關(guān)系:
class ProductFamily{
private List<Product> products;
//add all other members and getters and setters
}
每當(dāng)您想向Product特定ProductFamily實(shí)例添加新實(shí)例時(shí),都可以Product從 getter 獲取列表并添加到其中。類中可能有另一個(gè)方法ProductFamily可以讓您將新Product實(shí)例添加到列表中。
class ProductFamily{
private List<Product> products;
//add all other members and getters and setters
public void addProduct(Product newProduct){
this.products.add(newProduct);
}
}

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊
您只能在 Java 中擴(kuò)展一個(gè)類。您可以在許多課程中做到這一點(diǎn)。如果你想擴(kuò)展多個(gè)具有相同函數(shù)名的類,我會(huì)使用接口。

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果您來自關(guān)系數(shù)據(jù)庫的世界,您可能會(huì)牢牢掌握幾個(gè)相互關(guān)聯(lián)的概念,包括關(guān)系聯(lián)接、數(shù)據(jù)規(guī)范化、邏輯數(shù)據(jù)獨(dú)立性、自描述數(shù)據(jù)、ACID 事務(wù)和并發(fā)控制。如果不熟悉所有這些概念,初學(xué)者很難真正掌握這些概念的強(qiáng)大和簡單性。信不信由你,對(duì)象建模專家并不容易通過將它們與他們已經(jīng)知道的事物進(jìn)行比較來掌握這些概念中的每一個(gè)。
當(dāng)您第一次開始學(xué)習(xí)對(duì)象建模時(shí),也會(huì)發(fā)生類似的事情。三個(gè)相互關(guān)聯(lián)的概念是繼承、封裝和多態(tài)。如果不了解其他兩個(gè),這些都沒有多大意義。他們一起工作,創(chuàng)造了一個(gè)既強(qiáng)大又簡單的系統(tǒng)。
抵制將對(duì)象模型視為關(guān)系模型的誘惑,只是沒有一些特征。這是對(duì)對(duì)象模型的過度簡化。事實(shí)是,大約四十到五十年前,這些建模范例中的每一個(gè)都是建模藝術(shù)狀態(tài)的巨大進(jìn)步。它們中的每一個(gè)都使思考現(xiàn)有系統(tǒng)或提議的系統(tǒng)變得更加容易,但尚未構(gòu)建。
但它們彼此不同,兩者都不是從另一個(gè)衍生而來的。
如果你打算從關(guān)系思考開始,這里是開始的地方。確定 Product 和 ProductFamily 之間的關(guān)系是 HAS-A 關(guān)系還是 IS-A 關(guān)系。HAS-A 關(guān)系很容易使用單獨(dú)的表和外鍵建模(關(guān)系上)。就對(duì)象而言,最好將它們建模為單獨(dú)的類,并相互引用。IS-A 關(guān)系是不同的。例如,寵物店可能有貓、狗、鳥和蛇,但它們都是寵物。有些屬性或方法只適用于鳥類或貓,但也有一些屬性或方法適用于所有這些。
關(guān)系建模中與超類/子類最接近的類似物不在關(guān)系模型中,而是在擴(kuò)展實(shí)體關(guān)系模型中。在這里,有一個(gè)概念叫做泛化/專業(yè)化。貓、狗、鳥或蛇是泛化寵物的特化。這是一種 IS-A 關(guān)系。如果泛化/專業(yè)化在手頭的情況下對(duì)您有意義,那么子類和繼承將為您提供很好的服務(wù)。如果沒有,那么你最好不要在這里嘗試使用子類。
習(xí)慣于對(duì)象建模并想知道如何完成與 SQL 表的 IS-A 關(guān)系的人在 StackOverflow 中提出了數(shù)百個(gè)問題。最新示例就在您的問題旁邊,稱為Schedule Join Multiple Tables。對(duì)于那些人,有一個(gè)標(biāo)簽類表繼承. 他們很難理解的是,關(guān)系模型如何在沒有繼承概念的情況下做任何事情。你的問題正好相反。如何以及何時(shí)使用繼承使生活比關(guān)系模式中的生活更簡單。以及何時(shí)不使用繼承。
您需要確定 Product 和 ProductFamily 是否是繼承有用的情況。同樣,如果它是 HAS-A 關(guān)系,請(qǐng)忘記子類和繼承。如果是 IS-A 關(guān)系,那么繼承是簡單解決方案的關(guān)鍵。為了對(duì)超類進(jìn)行有意義的操作,您要么必須將自己限制在對(duì)超類有意義的操作上,要么必須學(xué)習(xí)如何構(gòu)建多態(tài)操作。這是很多學(xué)習(xí),但在路的盡頭有很多價(jià)值。
添加回答
舉報(bào)