You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中Person s1=new Student()未触发多态的问题求助

问题分析与解决

这是因为C#和Java在方法多态的默认规则上存在差异:

  • Java里非static、final、private的方法默认是虚方法,天然支持多态
  • C#里的方法默认是**非虚(密封)**状态,必须显式声明才能让子类重写实现多态

正确的代码实现方式

1. 父类Person中声明虚方法

给Comment方法加上virtual关键字,标记它允许被子类重写:

public class Person
{
    // 用virtual标记允许重写
    public virtual void Comment()
    {
        Console.WriteLine("Person的Comment方法");
    }
}

2. 子类Student中重写方法

给子类的Comment方法加上override关键字,明确表示这是重写父类的虚方法:

public class Student : Person
{
    // 用override标记重写父类的virtual方法
    public override void Comment()
    {
        Console.WriteLine("Student的Comment方法");
    }
}

3. 验证多态效果

现在执行Person s1 = new Student(); s1.Comment();,就会触发子类的Comment方法,正常实现多态。

额外注意:避免误用new关键字

如果你的Student类里写的是public new void Comment(),这不是重写,而是隐藏父类的方法,此时用父类引用调用时,仍然会执行父类的方法,这也是常见的错误点。

内容的提问来源于stack exchange,提问作者LeotrimR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:02:58