Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从外部类修改基类中的内容并从派生类访问它_Java_Class_Inheritance_Null - Fatal编程技术网

Java 从外部类修改基类中的内容并从派生类访问它

Java 从外部类修改基类中的内容并从派生类访问它,java,class,inheritance,null,Java,Class,Inheritance,Null,我有一个基类、一个派生类和另一个外部类。 我尝试从外部类更新基类中的值,然后 从派生类访问它 我的班级结构如下: class B:{ bool flag; setFlag(bool value){ flag = value; } printFlag(){ print flag; } ExternalClass e = new ExternalClass(this); } class External { B b = null; External( B b){ this.b = b; }

我有一个基类、一个派生类和另一个外部类。 我尝试从外部类更新基类中的值,然后 从派生类访问它

我的班级结构如下:

class B:{

bool flag;

setFlag(bool value){
flag = value;
}
printFlag(){
print flag;
}

ExternalClass e = new ExternalClass(this);
}

class External {
B b = null;
External( B b){
this.b = b;
}
b.setFlag(true);

}

Class Derived : extends B{

printFlag();
}
在这里,虽然我已将标志设置为true,但print方法将打印false。 我不知道发生了什么事。请帮帮我


以下是一些代码,可以满足您的要求:

class Derived extends B{
    public Derived(){
        super(); 
        // this is the important bit, by calling super() you call the parent classes
        // constructor, which in this case changes the attribute "flag"
        // by using the constructor of the external class on the class
    }
}

class B {
    boolean flag;
    ExternalClass e;

    public B(){
        e = new ExternalClass(this);
    }

    public void setFlag(boolean value) {
        flag = value;
    }

    public void printFlag() {
        System.out.println(flag);
    }

}

class ExternalClass {

    B b = null;

    public ExternalClass(B b) {
        this.b = b;
        b.setFlag (true);
    }
}

下面是一些代码,可以实现您的愿望:

class Derived extends B{
    public Derived(){
        super(); 
        // this is the important bit, by calling super() you call the parent classes
        // constructor, which in this case changes the attribute "flag"
        // by using the constructor of the external class on the class
    }
}

class B {
    boolean flag;
    ExternalClass e;

    public B(){
        e = new ExternalClass(this);
    }

    public void setFlag(boolean value) {
        flag = value;
    }

    public void printFlag() {
        System.out.println(flag);
    }

}

class ExternalClass {

    B b = null;

    public ExternalClass(B b) {
        this.b = b;
        b.setFlag (true);
    }
}

如果您向您展示实际的代码(最好是最小但可编译的代码),这将非常有用。也许你只有一行代码,比如
flag=flag。发布一个演示您的问题的示例将帮助您获得更好的答案。在您的示例中没有将任何变量设置为true。assylias:我已经编辑过它:在外部类中将标志设置为true。“Base”类中的属性对于“Base”类的所有实例都应该相同吗?在这种情况下,你可以使用“static”关键字。任何其他类都可以修改我的i use static值。如果您向您展示实际代码(最好是最小但可编译的代码),这将非常有用。也许你只有一行代码,比如
flag=flag。发布一个演示您的问题的示例将帮助您获得更好的答案。在您的示例中没有将任何变量设置为true。assylias:我已经编辑过它:在外部类中将标志设置为true。“Base”类中的属性对于“Base”类的所有实例都应该相同吗?在这种情况下,你可以使用“static”关键字。任何其他类都可以修改我使用static的值。