这是我第一次使用类,所以请原谅我的无知。
我有一个 Pet 类,它是我的基类。我有两个 child 类,狗和猫。我想要做的是让 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()':在覆盖 'public' 继承成员 'Lab12.Pet.speak()' 时无法更改访问修饰符”
我做错了什么?我知道这与某处的保护级别有关,我一直将事情从公共(public)切换到 protected 或私有(private),但它没有解决任何问题。有人帮忙吗?
最佳答案
由于 Speak() 最初是公开的,因此您需要将其保持公开。您“无法更改访问修饰符”(公共(public)与私有(private))。
此外,您不能覆盖非虚拟或静态方法。 重写的基方法必须是虚拟的、抽象的或重写的。
阅读:http://msdn.microsoft.com/en-us/library/ebca9ah3(v=vs.100).aspx
关于c# - 类继承/方法覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13675787/