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