关于继承中方法重写的问题。

garyzhang2681 2010-09-28 01:41:59
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Inheritance
{
class A
{
public A()
{
PrintFields();
}
public virtual void PrintFields(){
Console.WriteLine("A");
}
}
class B : A
{
int x = 1;
int y;
public B()
{
y = -1;
}
public override void PrintFields()
{
Console.WriteLine("x={0},y={1}", x, y);
}
}

class Program
{
static void Main(string[] args)
{
B b = new B();
Console.ReadLine();
}
}
}
为什么这个程序的运行结果是:
x=1,y=0

在调用A类的构造函数时调用的PrintFields();方法会调用到B类中的重写方法;
是不是因为PrintFields();被重写之后,整个程序就只认B类中的PrintFields();方法了?

小弟初学,希望大家多多指教~呵呵~


...全文
108 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyerwing 2010-09-28
  • 打赏
  • 举报
回复
经常不用都忘了OO概念了.
lrh_079 2010-09-28
  • 打赏
  • 举报
回复
“在调用A类的构造函数时调用的PrintFields();方法会调用到B类中的重写方法;”
这句话其实不完整,在这里其实是子类B的构造函数运行前,需先运行父类A的构造函数,所以父类A中的PrintFields方法其实已经为子类B重写的了。若使用A a = new A();,那么将调用A的
PrintFields方法输出:A。
q2whitecat 2010-09-28
  • 打赏
  • 举报
回复
老问题了
kensouterry 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyazhe 的回复:]
new的哪个类,就调用这个类中的override方法。
[/Quote]

正解,我顶一下先!
兔子-顾问 2010-09-28
  • 打赏
  • 举报
回复
new的哪个类,就调用这个类中的override方法。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧