我今天在C#中学习一些OOP概念,并且在学习过程中发现子类Object可以直接从其超类重写被调用的方法,我对Java很熟悉,在Java中,如果从其超类重写方法如果子类对象正在调用相同的方法,则执行子类中存在的方法,而不执行父类方法,而使用“ super”关键字。
我的问题是C#如何提供直接允许子类对象执行被覆盖的超类方法的功能。
下图是代码,其中子类对象“ obj”允许我通过提供选项“ void Super.display”来调用超类方法display
从图像中,您没有override
基类中的方法,而是隐藏了方法。
使用方法隐藏,您无法像从屏幕截图中那样从子类中调用基类方法:
屏幕截图中的代码。
Sub obj = new Sub();
obj.display();// this will call the child class method
对Super.display
智能的引用可能是错误的,您不能像这样从基类中调用隐藏方法。
(此外,new
由于方法隐藏,您还应该获得使用关键字的警告)
为了实现适当的覆盖,您在基类中的方法必须为virtual
或abstract
类似:
public class Super
{
public virtual void display()
{
Console.WriteLine("super/base class");
}
}
public class Sub : Super
{
public override void display()
{
Console.WriteLine("Child class");
}
}
然后可以这样称呼它:
Super obj = new Sub();
obj.display(); //child class
Super objSuper = new Super();
objSuper.display(); //base class method
如果要从子类内部调用基类方法,请使用如下base
关键字:
public override void display()
{
base.display();
Console.WriteLine("Child class");
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句