假设我有两个班级:
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
内部类是否有办法修改外部类的变量? 感谢您提前获得所有帮助。
答案 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);
}