我想要做的是在父类中实例化一个名为" pObject"的对象。 (假设要保护的类型为布尔值)。扩展父类的一个子类设置" object" to" true"。另一个也扩展父类的子类将检查" object"设置为true。
这在Java中是否可行?
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");
}
}
}
答案 0 :(得分:2)
您可以将pObject
设为静态,并将其作为parentClassAction.pObject
访问。
答案 1 :(得分:0)
您可以使用以下语法访问超类的非私有字段:
super.myBoolean = true;
注意:如果该字段具有默认可见性(缺少修饰符),则仅当子类位于同一个包中时才可访问该字段。
已修改:由于添加到问题中的新代码,我添加了信息。
您似乎想要检查来自两个不同对象的变量。只有当该变量是静态的时候才有可能。因此在父类中将其声明为protected static
。其余代码保持不变。
答案 2 :(得分:0)
如果您有2个不同的子类实例 - 它们不共享任何状态。它们中的每一个都有独立的pObject实例,所以如果你改变一个对象就不会在另一个对象中看到它。
有很多方法可以解决您的问题。最简单的方法是:你可以使这个字段pObject成为静态 - 它可以用于简单的例子,但这也可能是严重的限制(如果你想拥有多个pObject实例)。
答案 3 :(得分:0)
是。如果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());
}
}