2 回答

TA貢獻1817條經驗 獲得超14個贊
您可以使用的語言結構是接口或抽象類。
接口:定義不相關對象之間的通用行為(例如,可以序列化的對象、可以比較的對象等)。
抽象類:定義跨對象層次結構的公共行為(例如,在 中定義方法并
getPrice
在 中Item
繼承該方法是有意義的Weapon
)。
在你的榜樣,等方法getWidth()
,getHeight()
,getX()
和getY()
都不錯的候選人接口(因為它們共享不相關的對象之間有一些共同的特點)。

TA貢獻1806條經驗 獲得超8個贊
// Another way to share this state would be via a Point interface and
// aggregating two point objects in your Item and Character classes
interface Coordinates {
double getX1();
double getY1();
double getX2();
double getY2();
}
interface Dimension {
double getWidth();
double getHeight();
}
我不知道你的整個背景,但你確定你需要坐標和尺寸(我認為你可以從 X 和 Y 確定寬度和高度)?
這些接口應該由您的兩個祖先類(Character和Item)實現并通過層次結構繼承。難道不是之間添加一個共同的祖先Character和Item只是讓你能避免實施getX和getY的兩倍。
關于move方法,我認為這是另一個責任,您應該在其他地方定義它。
// Not necessarily the right name
class MoveHelper {
// You can pass either a Character or an Item here
// since both implement Coordinates
// Not necessarily the right signature
void move (Coordinates object)
}
根據您選擇如何設計解決方案,該move方法可以成為一個static地方或一個對象,你會聚集在這兩個Character和Item并委托給它的move實施。
最后一點,請考慮您可以通過繼承(接口和抽象類)或組合(如果您將MoveHelper和 委托給它以move實現Character和 中的實現,您會怎么做)實現重用Item。
希望這可以幫助!
添加回答
舉報