在大學里,我有任務要做。我有如下簡單的程式。我有一個代表人的父類,很少有繼承它并代表角色的子類(Archer,Knight,Wizzard)。我必須實作功能以輕松切換物件型別,從 Archer 到 Knight 等等。一開始我想用所有獨特的方法創建一個大介面,但它打破了SOLID規則,但我無法打破這個規則。有人可以幫忙弄清楚嗎?
這是如何看代碼:
public abstract class Person
{
public String Name;
public char Age;
void describe()
{
//some code
}
}
角色類:
public class Archer : Person
{
public int agility;
public void describe()
{
//some code
}
public void fightUsingBow()
{
//some code
}
}
下一個角色:
class Wizzard : Person
{
public int mana;
public void describe()
{
//some code
}
public void castASpell()
{
//some code
}
}
uj5u.com熱心網友回復:
你真的需要改變物件型別嗎?你也可以抽象這個方法
例如:更改FightUsingBow() CastASpell()為Attack()或SpecialAttack()
如果需要,您可以為它們創建一個抽象類。例如Guardian與父類Person
abstract class Guardian : Person
{
public abstract void Attack();
}
為您的監護人使用 Guardian 類。
uj5u.com熱心網友回復:
您不能只是將弓箭手“轉換”為騎士。弓箭手不是騎士。您可以使用弓箭手的相同基礎屬性創建一個新騎士,但沒有內置方法可以做到這一點。一種方法是為一個人使用“復制建構式”——例如:
public Person(Person basePerson)
{
this.Name = basePerson.Name;
this.Age = basePerson.Age
}
然后添加一個建構式來Knight呼叫復制建構式:
public Knight(Person basePerson) : base(basePerson) {}
uj5u.com熱心網友回復:
我會通過 Factory OOP 實作并解決這個問題。
接受一個 Person 和 dest 物件型別作為輸入。并將盡可能多的屬性從 Person 附加到最終的專業人士。
轉換背后的潛在資料丟失可能會通過不同的策略得到緩解。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/380225.html
上一篇:PythonOOP的問題
