鉴于这种Java代码,这个输出0和4:
class A{
A() { print(); }
void print() { System.out.println("A"); }
}
class B extends A{
int i = Math.round(3.5f);
public static void main(String[] args){
A a = new B();
a.print();
}
void print() { System.out.println(i); }
}
而与此相同的C#代码,这个输出4,4
使用系统;
class A{
internal A() { print(); }
virtual internal void print() { Console.WriteLine("A"); }
}
class B : A{
int i = (int) Math.Round(3.5f);
public static void Main(string[] args){
A a = new B();
a.print();
}
override internal void print() { Console.WriteLine(i); }
}
虽然我弄清楚,输出应该是Java的4和4,但得到的答复居然是0和4上的Java。 然后我试图在C#中,答案是4和4
是什么赋予了? 爪哇理由是,建筑B的过程中,A仍在初始化(因此我断定如果爪哇所述A仍在初始化乙仍在初始化),所以默认值应该是0。因此输出为0,并在Java中4。
为什么C#构造函数的行为从Java,或反之亦然不同?