c# - 为什么我不能在继承的类中使用继承的对象?
问题描述
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+ 小时)
解决方案
您不能只从派生类写入字段(在基类中定义),例如:
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
但有陷阱。
推荐阅读
- python-3.x - 如何在 Ubuntu 18.04 上的 Python3 中安装 Nest
- java - 无法使用 Joda 时间获得两个时间戳之间的正确差异
- css - Wordpress 主题无法正常工作 - 没有图像或 CSS
- git - 从“git status”CLI 中“git add”文件的交互式方式?
- c++ - 如何提高使用线程的 c++ 代码的效率?
- reactjs - 如何使用 Facebook 像素为单页应用程序进行自定义页面跟踪?
- java - 找不到匹配的构造函数:java.time.LocalDate()
- sql - 如何将包含时区的时间戳 varchar 转换为时间戳类型
- r - 将 R 中的 keras 时间序列生成器拟合到时间序列和外生数据
- webview - 带有 Excel 和 Edge Webview 的 Office-js 插件 - 如何删除缓存?