繁体   English   中英

类继承/方法覆盖

[英]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的子类。

有错误告诉您在覆盖方法时无法更改访问类型。 所以,要解决这个问题,只需将方法保持为CatDog公共方法:

public override void speak()
    {

    }

那么,你得到这个错误的原因是你从父类Pet继承了“speak”方法。 您已将speak()方法声明为公共方法,然后继承它并使其处于受保护状态。 我建议你继承它并将其覆盖在Dog,Cat,Monkey类中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM