这是我第一次和班级一起工作,所以请原谅我的无知。职业继承/方法重写
我有一个Pet类是我的基类。我有两个孩子班,狗和猫。我想要做的是让Cat和Dog方法通过说“Woof!”来覆盖Pet方法。和“喵!”而不是说话。然后在另一种形式中,我必须在按下按钮上打印信息(名称,颜色和他们说话)。
class Pet
{
protected string name, color, food;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public string Color
{
get
{
return color;
}
set
{
color = value;
}
}
public string Food
{
get
{
return food;
}
set
{
food = value;
}
}
public void speak(string s)
{
s = "Speak";
MessageBox.Show(s);
}
public Pet(string name, string food, string color)
{
//Constructor
this.Food = food;
this.Name = name;
this.Color = color;
}
class Dog : Pet
{
public Dog(string name, string food, string color)
: base(name, food, color)
{
}
protected override void speak()
{
}
}
}
(留出了猫,因为它是一样的狗差不多)
我不断收到错误“错误1‘Lab12.Cat.speak()’:'压倒一切的时候不能改变访问修饰符公共'遗传成员'Lab12.Pet.speak()'“
我在做什么错?我知道它与某个地方的保护级别有关,并且我始终将事情从公开转换为受保护或私有,但它并没有解决任何问题。帮助,任何人?
所以Dog类需要有“public override void speak()”,而Pet类有“public virtual void speak(string s)”?这就是我现在的情况,它仍然会给出同样的错误。字符串是否有所作为? – user1831281
签名必须匹配;由于'Pet'具有'public virtual void speak(string s)',所以Dog必须具有'public override void speak(string s)'。请参阅Joe的链接。 –
如果您使用Visual Studio,则Intellisense会向您显示您在键入“覆盖”时可以覆盖的方法,然后按Tab键。如果你想重写的方法不在列表中,这很可能是因为它没有以可被重写的方式声明。您只能覆盖Abstract或Virtual方法(并且可以覆盖覆盖...) – Joe