Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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_Inner Classes - Fatal编程技术网

Java-使内部类能够修改外部类

Java-使内部类能够修改外部类,java,class,inner-classes,Java,Class,Inner Classes,假设我有两门课: public class OuterClass { String string = "helloworld"; public class InnerClass { public void main(String[] args) { string = "lol"; System.out.println(string); } } public void change

假设我有两门课:

public class OuterClass {
    String string = "helloworld";

    public class InnerClass {

        public void main(String[] args) {
            string = "lol";
            System.out.println(string);
        }
    }

    public void changeString() {
        InnerClass c = new InnerClass();
        c.changeString();
        System.out.println(string);
    }
}
输出将是:

lol
helloworld
内部类是否有办法修改外部类的变量?
提前感谢所有的帮助。

将对外部类的引用传递给构造函数中的内部类

public class InnerClass {

    private OuterClass parent;

    public InnerClass(OuterClass parent)
    {
       this.parent = parent;
    }

    public void changeString() 
    {
        parent.string = "lol";
        System.out.println(string);
    }
}

然后类的内部将使用
新的内部类(this)

实例化。您需要将外部类的实例传递给内部类的构造函数,然后将其分配给成员变量,然后您可以引用您的示例未编译的成员变量,但您可以使用以下方法修复此问题

static String string = "helloworld";

static class InnerClass {
    public void changeString() {
        string = "lol";
        System.out.println(string);
    }
}

public static void main(String[] args) {
    InnerClass c = new InnerClass();
    c.changeString();
    System.out.println(string);
}
哪些输出(按要求)

编辑

基于您在下面的评论,并使用Java8

String string = "helloworld";
public class InnerClass {
    public void changeString() {
        string = "lol";
        System.out.println(string);
    }
}

public static void main(String[] args) {
    OuterClass m = new OuterClass();
    InnerClass c = m.new InnerClass();
    c.changeString();
    System.out.println(m.string);
}

我在代码中做了一个更改,其中内部类访问外部类的对象并对其进行修改

public class OuterClass
{
    String string = "helloworld";

    public class InnerClass
    {
        public void changeString()
        {
            string = "lol";
        }
    }
    public static void main(String[] args)
    {
        OuterClass outerClass = new OuterClass();
        System.out.println(outerClass.string);
        outerClass.new InnerClass().changeString();
        System.out.println(outerClass.string);
    }
}
它的输出是:

helloworld
lol
由于变量字符串是静态的,因此您现在可以从类中定义变量的任何类访问它,即内部类,因此您可以从内部类外部类更改变量的值。因此,代码将是:

public class OuterClass {
    public static String string = "helloworld";

    public class InnerClass {
        string = "lol";
    }

    public static void main(String[] args) {
        System.out.println(string);
    }
}

希望这有帮助。

您不能更改类中的非静态变量,您可以更改对象实例中的变量,也可以调用
c.changeString()
,非静态的是
InnerClass.changeString()
,它不会编译。但这是完全不同的,因为它不再修改实例变量了。string=“lol”是否不会给出编译问题?还是我在这里遗漏了什么?这对我很有帮助。谢谢
public class OuterClass {
    public static String string = "helloworld";

    public class InnerClass {
        string = "lol";
    }

    public static void main(String[] args) {
        System.out.println(string);
    }
}