私は試験勉強をしていて、サンプル プログラムを調べていて混乱しています。コードは次のとおりです。
public class Problem1 {
public static void f(A X)
{
A Y = X;
Y.key = X.key + 1;
}
public static void f(B X)
{
B Y = new B();
Y.key = X.key + 2; //Y.key = 12
X = Y; //X points to Y?
}
public static void main(String[] args)
{
A P = new A();
P.key = 3;
B Q = new B();
Q.key = 10;
f(P);
System.out.println(P.key);
f(Q);
System.out.println(Q.key);
P = Q;
f(P);
System.out.println(P.key);
}
}
class A
{
public int key;
}
class B extends A
{
}
f(P)で大丈夫です。私が持っている質問は、f(Q) です。Y という名前の新しい B が作成され、そのキーは 12 であることがわかりました。私が持っている質問は、X = Y は X を Y に向けるべきではないということです。Q のキー値を 10 ではなく 12 にしますか? コードは 4,10,11 を出力します。12 ではなく 10 を出力する理由がわかりません。