当子级继承自同一个父级但具有不同的方法和道具时,如何更改对象类型

问题描述 投票:0回答:3

在大学里我有任务要做。我有如下简单的程序。我有一个代表人的父类,以及几个继承它并代表角色(弓箭手、骑士、巫师)的子类。

我必须实现轻松切换对象类型的功能,从弓箭手到骑士等等。

起初我想过用所有独特的方法创建一个大接口,但这打破了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 Wizard : Person
{
        public int mana;

        public void describe()
        {
            //some code
        }
        
        public void castASpell()
        {
            //some code
        }
}
.net oop inheritance interface
3个回答
2
投票

你不能只是将弓箭手“切换”为骑士。弓箭手不是骑士。您可以使用与弓箭手相同的基本属性来创建一个“新”骑士,但没有内置的方法可以做到这一点。一种方法是对一个人使用“复制构造函数” - 类似于: public Person(Person basePerson) { this.Name = basePerson.Name; this.Age = basePerson.Age }

然后向 
Knight

添加一个调用复制构造函数的构造函数:

public Knight(Person basePerson) : base(basePerson) {}



0
投票

例如: 将

FightUsingBow()

CastASpell()
更改为
Attack()
SpecialAttack()
如果需要,您可以为它们创建一个抽象类。例如 

Guardian

与父类

Person
abstract class Guardian : Person
{
    public abstract void Attack();
}

为您的监护人使用 Guardian 类。


0
投票

接受 Person 和 dest 对象类型作为输入。 并将尽可能多的人的属性附加到最终的专业人员。

可以通过不同的策略来减轻转换背后潜在的数据丢失。

© www.soinside.com 2019 - 2024. All rights reserved.