这是我第一次上课,所以请原谅我的无知。
我有一个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()':覆盖'public'继承的成员'Lab12.Pet.speak()'”时无法更改访问修饰符
我做错了什么?我知道它与某些地方的保护级别有关,而且我一直将事物从公共转换为受保护或私有,但它并没有修复任何东西。帮助,任何人?
答案 0 :(得分:4)
由于Speak()最初是公开的,因此您需要将其公开。您“无法更改访问修饰符”(公共与私人)。
此外,您无法覆盖非虚拟或静态方法。 重写的基本方法必须是虚拟,抽象或覆盖。
阅读:http://msdn.microsoft.com/en-us/library/ebca9ah3(v=vs.100).aspx
答案 1 :(得分:1)
Speak方法必须在您的基类中是虚拟的才能覆盖
宠物类
public virtual void speak(string s)
{
s = "Speak";
MessageBox.Show(s);
}
并且您必须使用相同的修饰符(公共)
狗类
public override void speak(string s)
{
base.speak(s);
}
答案 2 :(得分:0)
protected override void speak()
{
}
非常确定这是因为您要将public
方法更改为子类中的protected
。
错误告诉您在覆盖方法时无法更改访问类型。因此,要解决此问题,只需将该方法公开在Cat
和Dog
:
public override void speak()
{
}
答案 3 :(得分:-1)
好吧,你得到这个错误的原因是你从父类Pet继承了“speak”方法。您已将speak()方法声明为公共方法,然后继承它并使其处于受保护状态。我建议你继承它并将其覆盖在Dog,Cat,Monkey类中。