この 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 になるはずですが、実際の答えは Java では 0 と 4 です。それから私はC#でそれを試しました、答えは4と4です
何を与える?Java の理論的根拠は、B の構築中、A はまだ初期化中です (したがって、Java が A がまだ初期化中であると言った場合、B はまだ初期化中であると仮定します)。そのため、デフォルト値は 0 である必要があります。したがって、出力は Java では 0 と 4 です。
C# コンストラクターの動作が Java と異なる、またはその逆の理由は?