问题:在父类中单独的一个方法,调用父类的一个虚方法(该方法是被子类重写的),那么执行的这个虚方法是掉父类的方法呢还是子类的方法呢?
class Father { public string name = "我是父亲"; public virtual string GetName() { return this.name; } public void SetFather() { var _name = this.GetName();//如果实例对象是子类的话,这里调的是子类的重写方法;如果实例对象是父类的话,调的当然是父类的方法 Console.WriteLine("通过GetName方法获取的值:" + _name); Console.WriteLine("Father的name是:" + name); } } class Son : Father { public string son_name = "我是儿子"; public override string GetName() { this.son_name = "儿子变成猪"; this.name = "父亲的名字改变了哦"; return this.son_name; } }
调用:
/* * 这里主要是测试 在父类中单独的一个方法,调用父类的一个虚方法(该方法是被子类重写的),那么执行的这个虚方法是掉 * 父类的还是子类的呢? * 实验证明:调的是子类的被重写的方法。 */ Console.WriteLine("实例化son对象"); Father f = new Son(); f.SetFather(); Console.WriteLine("========================我是华丽的分割线========================"); Console.WriteLine("实例化father对象"); Father f2 = new Father(); f2.SetFather(); Console.Read();
答案是:如果实例对象是子类的话,这里调的是子类的重写方法;如果实例对象是父类的话,调的当然是父类的方法