一道简单笔试题
class A
{
public A()
{
PrintFields();
}
public virtual void PrintFields()
{
}
}
class B : A
{
int x = 1;
int y;
public B()
{
y = -1;
}
public override void PrintFields()
{
Console.WriteLine("x={0},y={1}", x, y);
}
}
当使用new B()创建B的实例时,产生什么输出?
答案:x = 1, y = 0 ; x = 1 y = -1
1.面试回来后我在自己机器试了下,输出的是x=1,y=0。他们给的答案竟然不对?!
2.为什么实例化类B会执行方法PrintFields();
3.为什么 y = 0 ?
------解决方案--------------------答案不是x = 1, y = 0 ; x = 1 y = -1?应该没问题是这个答案吧,你这个y在A中都没赋值它默认就给个0了吧,你下面的y=-1那是你在实例B时给它赋值了y=-1,这道题就是个继承和重写题,B继承了A,A中有虚拟方法,你在B中重写,继承A,就会输出A中的方法,A中没x也没定义,但是你的B中声明了,就可以用了,就会先输出父类的结果就是x=1,y=0;接着就是输出B的结果x=1,y=-1,应该是这结果,但是我不知道LZ为什么测试出不同答案,假期闲的蛋疼,上面说的表达的不清楚不要介意
------解决方案--------------------因为父类 的构造方法 执行了 PrintFields() 子类又 从新写了PrintFields()这个方法 狗仔函数都是在类实例的时候执行 所以你的答案是错的。
------解决方案--------------------
反正闲测试了
死心了没,LZ还是去看看继承,这个就是个基础来的,期末考试会出的题,没想到是面试题····
------解决方案--------------------
反正闲测试了