【发布时间】:2021-03-18 12:27:16
【问题描述】:
我有 3 个类的多级继承
class Product1
{
public virtual void Show()
{
Console.WriteLine("Product1.show");
}
}
class Product2 : Product1
{
public override void Show()
{
Console.WriteLine("Product2.show");
}
}
class Product3 : Product2
{
public new void Show()
{
Console.WriteLine("Product3.show");
}
}
在创建对象时,我将 Product3 的对象分配给 Product1。
class Products
{
static void Main()
{
Product1 product1 = new Product1();
Product3 product3 = new Product3();
product1 = product3;
product3.Show();
product1.Show();
}
}
并调用 Show 方法。我认为在这两种情况下,答案都是 Product3.show 但不确定如何调用 Product2.show。
任何关于解释的帮助将不胜感激:)
【问题讨论】:
-
请注意,不是截图,而是“输出:”,然后输出会更清晰。
-
如果您已经知道
new和override之间的区别(因为您同时使用了两者),也许您会感到困惑,即使您分配了@987654327 的实例,也不会调用Prduct3.Show@。原因是您将其分配给Product1类型的变量,而不是Product3。 -
@TimSchmelter,我期待
Product3两次!因为我已经将Product3的对象分配给Product1。但是正如您所澄清的那样,这是不可能的?!我还是一头雾水,为什么Product2.Show出现在图片里 -
@kardinal: 什么期望
Product3两次,什么是不可能的?对不起,但你的评论让我很困惑。当然有可能得到两次"Show Product3"。您只需将new关键字替换为override。关键字new创建了一个新方法,它与继承的方法Show(只是名称)无关。 -
@kardinal:因为您在
Product2中覆盖了Show,实际上这是一个继承自Product2的Product3实例。即使您“隐藏”父类型(类或接口)中的实例,继承也有效。
标签: c# oop inheritance virtual