内部クラスが存在するときに継承がJavaでどのように機能するかを理解できません。私は現在、子クラスがその親クラスの内部クラスの機能を少し変更する必要がある何かに取り組んでいます。私は以下の簡単な、同類の例を思いついた。内部クラスが関与するときにJava継承がどのように機能するか
私はこのコードで "私はChildClass.InnerClassです"と表示する代わりに、 "私はParentClass.InnerClassです"と表示します。どうしてこれなの?また、メイン のobjオブジェクトをChildClass型に変更すると、出力は "私はChildClass.InnerClassです"に変わります。どうしてこれなの?
一般に、オブジェクトの親クラスの内部オブジェクトの動作を変更するには、どのような方法が推奨されますか?
class InnerClassTest {
//-----------------------------------------------------------------------
// PARENT CLASS
class ParentClass {
public ParentClass() {
x = new InnerClass();
}
InnerClass x;
class InnerClass {
public void speak() {
System.out.println("I am a ParentClass.InnerClass");
}
}
}
//-----------------------------------------------------------------------
// CHILD CLASS
class ChildClass extends ParentClass {
public ChildClass() {
x = new InnerClass();
}
InnerClass x;
class InnerClass extends ParentClass.InnerClass {
public void speak() {
System.out.println("I am a ChildClass.InnerClass");
}
}
}
//-----------------------------------------------------------------------
// MAIN
public static void main(String[] args) {
ParentClass obj = (new InnerClassTest()).new ChildClass();
obj.x.speak();
}
}
'ParentClass obj; //obj.xはchild'のxを意味します??あなたはChildClass objを意味しましたか? – exexzian
@sansix:そうです。編集していただきありがとうございます。ソリューションの場合は –
+1 – exexzian