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

时间:2014-12-29 02:15:24

标签: 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 changeString() {
        InnerClass c = new InnerClass();
        c.changeString();
        System.out.println(string);
    }
}

输出将是:

lol
helloworld

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

5 个答案:

答案 0 :(得分:2)

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

中的内部类
public class InnerClass {

    private OuterClass parent;

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

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

然后在类的内部将使用new InnerClass(this)实例化。

答案 1 :(得分:2)

我在内部类访问外部类'对象并修改它的代码中进行了更改。

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

答案 2 :(得分:2)

因为变量 string static ,您现在可以从类中定义变量的任何类访问它,即 InnerClass ,因此您可以从 InnerClass 以及 OuterClass 更改变量的值。所以代码将是:

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

    public class InnerClass {
        string = "lol";
    }

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

希望这有帮助。

答案 3 :(得分:1)

您需要将外部类的实例传递给内部类的构造函数,然后将其分配给成员变量,然后您可以引用该成员变量

答案 4 :(得分:1)

你的例子没有编译,但你可以用

之类的东西来解决这个问题
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);
}

输出(按要求)

lol
lol

修改

根据您的评论,并使用Java 8

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);
}