[英]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.