次のコードを持つ Parent と Child の 2 つのクラスがあります。
public class Parent {
public String word;
}
親クラスには public フィールドが 1 つだけ含まれます。
public class Child extends Parent {
//super.word = "Simple field assignment.";
{
System.out.println(word);
}
String word2 = super.word = "Field assignment.";
{
System.out.println(word);
super.word = "Initialization block.";
System.out.println(word);
}
public Child(){
super.word="Constructor.";
System.out.println(word);
}
}
質問したいのは、単純な代入 'super.word = "word"' が許可されない理由ですが、次の二重代入は問題ありません。そして、誰かが後者で正確に何が起こっているかを特定できますか?
また、初期化ブロック内で割り当てが許可されているのはなぜですか?
次のメインプログラムを実行すると:
public class FieldTest {
public static void main (String[] args)
{
Child c = new Child();
System.out.println("1: "+c.word);
System.out.println("2: "+c.word2);
}
}
結果は次のとおりです。
null
Field assignment.
Initialization block.
Constructor.
1: Constructor.
2: Field assignment.