繁体   English   中英

为什么我不能在继承的 class 中使用继承的对象?

[英]Why can't I use inherited objects in my inherited class?

    class Vehicle  // base class (parent) 
    {
      public string brand = "Ford";  // Vehicle field
      public void honk()             // Vehicle method 
      {                    
        Console.WriteLine("Tuut, tuut!");
      }
    }
    
    class Car : Vehicle  // derived class (child)
    {
      public string modelName = "Mustang";  // Car field
      brand = "WHY İS NOT ??? "; // Error.

  public void honk(); // Error.
}

我不能那样做吗? 我们继承的class有它的函数、方法和变量吗? 我是不是学错了什么?

笔记; 它在主 function 内工作。

我已经处理这个问题很长时间了。 : / (3+ 小时)

您不能只从派生的 class 写入字段(在基类中定义),例如:

brand = "WHY İS NOT ??? "; // Error.

...因为您没有定义领域,而是试图更改基础 class Vehicle中定义的brand 不幸的是,它的编写方式,编译器认为这是一个孤立的赋值。 它应该存在于方法构造函数中。

尝试将其放在构造函数中:

class Car : Vehicle  // derived class (child)
{
      public string modelName = "Mustang";  // Car field

      public Car()
      {
          brand = "Acme"; 
      }

      public void honk() {}
}

鸣喇叭

public void honk(); // Error.

这里的问题是您的方法没有主体。 虽然您可以在interface中执行此操作,但您不能在属于 class 的非抽象方法中执行此操作。

给它一个像这样的最小的:

public override void honk() { }

...或者:

public override void honk() 
{
   // same thing but formatted differently
}

注意有一个新的override 如果您想在派生的honk中实现 honk 的新实现,最好将方法设置为virtual

IE

class Vehicle  // base class (parent) 
    {
      // ...

      public virtual void honk()           
      {                    
        Console.WriteLine("Tuut, tuut!");
      }

      // ...
    }

或者,您可以使用new而不是override但有陷阱

暂无
暂无

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

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