首页 > 解决方案 > 为什么我不能在继承的类中使用继承的对象?

问题描述

    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.
}

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

笔记; 它在 main 函数中工作。

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

标签: c#inheritance

解决方案


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

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

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

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

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

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

      public void honk() {}
}

鸣喇叭

public void honk(); // Error.

这里的问题是您的方法没有主体。虽然您可以在interface属于某个类的非抽象方法中做到这一点,但您不能这样做。

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

public override void honk() { }

...或者:

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

注意有一个新的override. 如果您想honk在派生类中实现新的实现,最好创建方法virtual

IE

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

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

      // ...
    }

或者,您可以使用new代替,override但有陷阱


推荐阅读