【发布时间】:2023-03-12 17:31:01
【问题描述】:
我正在处理一项涉及继承和覆盖方法的任务。我应该创建一个Ship 类和一个CruiseShip 子类。船类应该有两个成员变量,一个用于船名的字符串和一个用于船建造日期的字符串。该类还需要一个Print 方法来显示该信息。
CruiseShip 子类与此类似,只是它不是构建日期的成员变量,而是其最大乘客容量的整数值。子类应该覆盖Ship 类的Print 方法并只显示船名和容量(而不是日期)。
我下面的代码的问题是我不确定如何覆盖Print 方法来获取一个字符串和一个整数,而不是两个字符串。如何让覆盖方法显示适当的日期?
public class Ship
{
public virtual void Print(string name, string date)
{
Console.WriteLine("The ship's name: {0}", name);
Console.WriteLine("The ship's build date: {0}", date);
}
}
public class CruiseShip : Ship
{
public override void Print(string name, int capacity)
{
Console.WriteLine("The ship's name: {0}", name);
Console.WriteLine("The ship's passanger capacity: {0}", capacity);
}
}
public class SeeShips
{
static void Main(string[] args)
{
Ship newShip = new Ship();
newShip.Print("Generic Ship","1989");
Console.ReadLine();
}
}
【问题讨论】:
-
您不能“覆盖”方法并更改参数类型。时期。由于您选择调用接受两个字符串的方法,因此编译代码的方法是删除
override关键字。不清楚您期望在这里发生什么,因为您似乎想以任何一种方式调用基类方法,因为这是这里唯一接受两个字符串的方法。除了“它没有做我想要的”之外,你能解释一下你想要发生的事情吗? -
“CruiseShip 子类是类似的,只是 而不是 是构建日期的成员变量,它的最大乘客容量是一个整数值。”那是0意义。我只能假设你完全看错了作业。没有其他方法可以解释这一点。 “打印”听起来像“ToString()”方法。正常过载。
-
当然,让我尝试详细说明。基于其他cmets,我不确定成员变量是什么,或者如何使用它。我应该有一个使用这些成员变量来显示数据的
Print方法。我想要一个Ship类,它有一个成员变量作为其名称和日期,以及一个使用名称和日期变量的Print方法。然后我想要一个CruiseShip子类,它有一个容量成员变量和一个Print方法,它覆盖了父类中只打印船名和容量的方法。 -
你可以拥有所有这些,除了你不能改变你覆盖的方法的参数类型。方法需要参数吗?如果要让一个实例打印自己,不应该所有打印的数据都来自对象本身吗?
标签: c# class inheritance overriding subclass