2016-01-21 199 views
0

我正在做一個abstract superItem類,但我不確定把這個構造函數的參數放在哪裏。這是因爲Item由不同主題組成,即Course,Student,其將具有不同的參數。什麼作爲參數傳遞給構造函數從超類

Course的構造將是

public Course(String courseName, int courseNum) 
{ 
    super(); 
    this.courseNum = courseNum; 
    this.courseName = courseName; 
} 

併爲Student的構造將是

public Student(int studentID, String studentName) 
{ 
    super(); 
    this.studentName = studentName; 
    this.studentID = studentID; 
} 

所以現在我super()構造Item不接受任何參數,但可以」也不錯。我試圖查看這個主題,但它似乎只給出了使用super類的所有變量的例子。

+0

你能解釋一下'學生'和'課程'如何被視爲'項目'?對他們來說常見的是,你需要他們來擴展相同的抽象基類嗎? – Jason

+0

@Jason,他們Item'的'兩個子類,因爲最終所有'Items'將被放入任意'List' – user180708

+2

@ user180708只是爲了能夠把一切都在一個列表中,你並不需要一個超類。你可以創建一個List ,你可以把你的對象放在裏面。儘管如此,這沒有什麼意義。 –

回答

0

抽象超類不需要構造函數參數是很常見的。但是,在這種情況下,您還應該考慮,您真正需要的是一個通用接口,而不是超類。

您應該考慮如何使用Item對象以及如何使用Student對象。想一想,什麼是Item在你的應用程序中,它有什麼樣的屬性等。這將導致你到一個適當的類設計。

項目應該包含子類的共同屬性。恐怕,你想不恰當地申請繼承,因爲課程和學生沒有太多共同點。再說了,你想有一個類Teacher和類Student那麼公共超可能是Person其中將包括性別,年齡,姓名等

+0

好吧,我在想,我的抽象超類需要構造函數的參數,如果我想創建的'Item'類的getter/setter方法。但是,我可以爲子類使用getter/setter方法,然後將其轉換爲'Item'? – user180708

+1

我更新了我的答案。我建議你更深入地思考這個問題。繼承應該很少使用,只有在當超類可以被視爲子類的泛化情況下(例如,人是老師和學生的概括)。 –

0

我不認爲繼承是正確的選擇在這裏,除非你真的拼命地需要在單一列表結構中混合使用課程和學生,在這種情況下,我真的很想看看你甚至在做什麼。

如果你在對象之間沒有共同點,它們不應該共享一個共同的超類。根據這些構造函數中的參數,這些對象沒有任何共同之處。因此,你不應該讓一個超類加入它們。

所以你發現沒有任何子類不使用超類的任何變量的例子是因爲超類不應該這樣做。

例如,CircleSquareShape子類(最後一個可能是一個接口),但不WheelPerson_Named_CarlGeneric_Thing子類。車輪和卡爾之間沒有什麼共同之處,不過它們全都是Object

想想你是否需要這個超類。如果你這樣做,你需要弄清楚如何不需要它,因爲這實際上並不是繼承應該如何工作。也許,將你的巨大物品清單分成你所擁有的每個類的清單。

相關問題