由内部子代访问的父类设置的Java继承字段

由内部子代访问的父类设置的Java继承字段,java,inheritance,java-7,Java,Inheritance,Java 7,我有这样一个类图: 有一个名为BaseParent的父抽象类,它有一个内部静态类InnerStatic。两个类正在扩展它和它的内部类——Foo和Bar(总是这样) 我想要的是为基础对象设置一个字段 BaseParent parent = new Foo(); parent.setField(Field a); 然后在FooInner和BarInner的定义中,我想访问我之前通过调用setField()设置的字段 我试图将字段和setField()设置为静态,但一旦Foo调用setFieldB

我有这样一个类图:

有一个名为
BaseParent
的父抽象类,它有一个内部静态类
InnerStatic
。两个类正在扩展它和它的内部类——
Foo
Bar
(总是这样)

我想要的是为基础对象设置一个字段

BaseParent parent = new Foo();
parent.setField(Field a);
然后在
FooInner
BarInner
的定义中,我想访问我之前通过调用
setField()设置的字段

我试图将
字段
setField()
设置为静态,但一旦Foo调用
setField
Bar的
字段
也会更改,因为它是静态的,并且是相同的


我怎么能做到这一点呢?

残忍地说,不是<代码>字段
属于类
BaseParent
,因此
Foo
Bar
都使用相同的
字段


一个你可以考虑的解决方案,如果你真的想这样做的话,就是使用<代码>静态HashMap < /代码>。“正常”的方法是让

Foo
Bar
拥有自己的静态内部静态。

如果我得到了您想要的正确结果,我认为这应该在FooInner内部工作:

 Foo.this.getField();

这将使您从内部类对象获得外部类对象。然后,当您掌握了类Foo时,您现在可以调用它的超级实现。

静态和继承不可能同时混合使用。实际上,我不知道如何同时从两个类继承。
BaseParent parent=new BaseParent()应该给出一个编译器错误,因为
BaseParent
是抽象的。在Java中没有多重继承。您可以通过合成来解决它。@Amr看到,如果声明为静态,则它们都只使用同一个字段,OP已经提到,他尝试过,并且知道它失败。这就是为什么我提供了一个解决方法,并添加了“正常”方法。
 Foo.this.getField();