Java继承:父类的对象实例,对于2个子类是相同的

时间:2015-04-09 15:24:44

标签: java inheritance parent-child

我想要做的是在父类中实例化一个名为" 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");
        }
    }
}  

4 个答案:

答案 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());
    }
}