变量不像方法那样“被覆盖”。
在您的通话中,您希望
x成为
Child的人,但这不是因为
x是变量,而不是方法。
但要注意:你的引用类型是
ParentClass这样
obj.x指向
ParentClass的
InnerClass属性,即使真正的实例背后
parentClass是一个
ChildClass!
为了显示您期望的句子,您必须将类型引用更改为
ChildClass:
public static void main(String[] args) { ChildClass obj = (new InnerClassTest()).new ChildClass(); obj.x.speak();}为了更好地理解该概念,请尝试在
ParentClass和
ChildClass类中都定义一个方法:
public InnerClass getInnerClass(){ return x;}并
x私有化。
因此,“替代概念”适用。
在这种情况下,您的最终通话是:
ParentClass obj = (new InnerClassTest()).new ChildClass();obj.getInnerClass().speak();
要更改内部类的行为,请考虑使用 模板方法 模式或更佳的 方法 : 策略模式 (因为更加尊重DIP)



