class A { public A() { Print(); } public virtual void Print() { } } class B : A { int x = 1; int y; public B() { y = 2; } public override void Print() { Console.WriteLine("x=" + x + " y=" + y); } }
这道面试题如上,问题是当实例化B的时候会输出什么?
我对继承懂的还不是很清楚,忘高手帮忙排忧解惑下:
我知道在B实例化的时候首先调用基类A的构造方法,而A的构造方法被B类重写过了,但是在重写的方法里面调用了2个B类的字段x和y,x=1是肯定没问题的,因为x已经被初始化了,但是y没有被初始化,所有y应该是null吧,因为在A类调用构造方法Print()函数的时候B类的构造函数还没有执行,我面试的时候就想这个应该会抛出异常吧,但是我后来测试下发现结果是x=1,y=0
不知道这个y=0是怎么回事呢?难道是编译器默认的给重写过的方法里面不认识的字段自动初始化吗?
还有希望大侠们告诉小弟关于继承应该注意哪些东西,或者推荐些好的文章书籍之类的.
感激不尽!!!
慕标琳琳