Java继承:父类中的对象实例与2个子类相同
我要做的是在父类中实例化一个名为“pObject”的对象(假定类型为受保护的布尔型)。扩展父类的一个子类将“object”设置为“true”。另一个扩展父类的子类将检查“object”是否设置为true 这在Java中可能吗Java继承:父类中的对象实例与2个子类相同,java,inheritance,parent-child,Java,Inheritance,Parent Child,我要做的是在父类中实例化一个名为“pObject”的对象(假定类型为受保护的布尔型)。扩展父类的一个子类将“object”设置为“true”。另一个扩展父类的子类将检查“object”是否设置为true 这在Java中可能吗 public abstract class parentClassAction{ protected Boolean pObject; } public class childClass1Action extends parentClassAction{
public abstract class parentClassAction{
protected Boolean pObject;
}
public class childClass1Action extends parentClassAction{
super.pObject = true;
}
public class childClass2Action extends parentClassAction{
if(super.pObject!=null){
if(super.pObject == true){
System.out.println("Success");
}
}
}
您可以使用以下语法访问超类的非私有字段:
super.myBoolean = true;
注意:如果字段具有默认可见性(没有修饰符),则仅当子类位于同一个包中时才可以访问该字段
已编辑:由于问题中添加了新代码,我添加了信息。
您似乎喜欢检查来自两个不同对象的变量。只有在该变量是静态的情况下才有可能。因此,在父类中将其声明为
受保护的static
。代码的其余部分保持不变。如果您有两个不同的子类实例,则它们不共享任何状态。它们中的每一个都有POObject的独立实例,因此,如果更改一个对象,它将不会在另一个对象中显示
有很多方法可以解决你的问题。最简单的方法是:您可以将此字段pObject设置为静态-它可以用于简单的示例,但这也可能是一个严重的限制(如果您希望有多个pObject实例)。您可以将
pObject设置为静态,并作为parentClassAction.pObject
是访问它。如果pObject
是静态的,它将被共享:
public class Legit {
public static abstract class A {
protected static Boolean flag;
}
public static class B extends A {
public void setFlag(boolean flag) {
super.flag = flag;
}
}
public static class C extends A {
public boolean getFlag() {
return super.flag;
}
}
public static void main (String [] args) {
B b = new B();
C c = new C();
b.setFlag(true);
System.out.println(c.getFlag());
b.setFlag(false);
System.out.println(c.getFlag());
}
}
好的,我试着插入一个图像,但显然没有效果。我将设置一些伪代码避免伪代码--请显示真实代码。此外,字段是静态的还是非静态的?你的书面问题有点不清楚——请解释更多。让我们避免痛苦地从您那里提取信息。因此您有classRoot
和两个classChild1扩展Root
和Child2扩展Root
?这两个班对彼此一无所知。如果Child1
的实例设置了pObject
,这对Child2
的实例(或Child1
的另一个实例)没有任何影响。您需要从Child2
中对Child1
进行某种引用,否则,您无法真正确定某个对象是否已初始化。或者,你可以使用某种事件/观察者模式。我对我的问题进行了编辑,但“非私有”是不够的。另外,默认修饰符不合格我知道如何访问非私有字段,如我的问题中所示,我刚刚编辑/访问非私有字段不是我的问题有没有办法让子类共享pObject的实例?我只想要一个pObject的实例,然后我会选择受保护的静态pObject
出于我的目的,如果重新启动应用程序,POObject的值将丢失,否则将对象设置为静态完全有效。我必须找到另一个涉及ldap(轻量级目录访问协议)的解决方案。Nogard、duckstep和Ian2TEDV确实回答了我特别称赞他们的问题。如果我有足够的声誉来支持他们的答案,我会的。如果布尔标志
不能声明为静态
,例如在多线程场景中,或者可能由于其他原因,有没有办法在B类
和C类
之间共享标志
的值?