[英]Class Inheritance/Method Override
这是我第一次上课,所以请原谅我的无知。
我有一个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()'时无法更改访问修饰符
我究竟做错了什么? 我知道它与某些地方的保护级别有关,而且我一直将事物从公共转换为受保护或私有,但它并没有修复任何东西。 帮忙,有人吗?
由于Speak()最初是公开的,因此您需要将其公开。 你“无法改变访问修饰符”(公共与私人)。
此外,您不能覆盖非虚拟或静态方法。 重写的基本方法必须是虚拟,抽象或覆盖。
阅读: http : //msdn.microsoft.com/en-us/library/ebca9ah3(v = vs.100).aspx
Speak方法必须在您的基类中是虚拟的才能覆盖
宠物类
public virtual void speak(string s)
{
s = "Speak";
MessageBox.Show(s);
}
你必须使用相同的修饰符(公共)
狗类
public override void speak(string s)
{
base.speak(s);
}
protected override void speak()
{
}
很确定这是因为您正在将子public
方法更改为protected
的子类。
有错误告诉您在覆盖方法时无法更改访问类型。 所以,要解决这个问题,只需将方法保持为Cat
和Dog
公共方法:
public override void speak()
{
}
那么,你得到这个错误的原因是你从父类Pet继承了“speak”方法。 您已将speak()方法声明为公共方法,然后继承它并使其处于受保护状态。 我建议你继承它并将其覆盖在Dog,Cat,Monkey类中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.