In C# how can a sub class object can directly call a super class method which is overridden?
我今天在C中学习了一些OOP概念,在学习的过程中,我发现子类对象能够直接从被重写的超级类调用方法,我熟悉Java,如果从它的方法中重写了一个方法如果一个子类对象调用同一个方法,则执行子类中存在的方法,而不是使用"super"关键字执行该方法。
我的问题是C如何提供这样的特性,直接允许子类对象执行被重写的超类方法
下图是子类对象"obj"允许我使用的代码通过提供"void super.display"选项调用超级类方法显示
。
使用
但是您需要将父方法定义为
请参阅此示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | public class Person { protected string ssn ="444-55-6666"; protected string name ="John L. Malgraine"; public virtual void GetInfo() { Console.WriteLine("Name: {0}", name); Console.WriteLine("SSN: {0}", ssn); } } class Employee : Person { public string id ="ABC567EFG"; public override void GetInfo() { // Calling the base class GetInfo method: base.GetInfo(); Console.WriteLine("Employee ID: {0}", id); } } class TestClass { static void Main() { Employee E = new Employee(); E.GetInfo(); } } /* Output Name: John L. Malgraine SSN: 444-55-6666 Employee ID: ABC567EFG */ |
从图中,您没有从基类中删除方法
如果方法隐藏,则无法从子类调用基类方法,如屏幕截图中所示:
屏幕截图中的代码。
1 2 |
号
在intellisence中对
(另外,由于方法隐藏,您应该收到使用
要实现适当的重写,基类中的方法必须是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class Super { public virtual void display() { Console.WriteLine("super/base class"); } } public class Sub : Super { public override void display() { Console.WriteLine("Child class"); } } |
然后你可以这样称呼它:
1 2 3 4 5 |
。
如果要从子类内部调用基类方法,请使用
1 2 3 4 5 | public override void display() { base.display(); Console.WriteLine("Child class"); } |