[英]How do I access the methods and Global variables of outer class from an inner class object, and if I cannot what is purpose of having an Inner class
public class StaticAndInnerClasses {
String testString;
class InnerClass{
int x;
int y;
}
static class InnerStaticClass{
int a=10;
int b=20;
}
public void changeCharacter(){
testString="Characters modified";
}
public static void main(String[] args){
StaticAndInnerClasses.InnerStaticClass statciClassObject=new StaticAndInnerClasses.InnerStaticClass();
StaticAndInnerClasses outerObject=new StaticAndInnerClasses();
outerObject.changeCharacter();
InnerClass innerClassObject=outerObject.new InnerClass();
innerClassObject.changeCharacter();
}
}
正如您在代码中看到的那样,我在最后一行中创建了一个innerClassObject,现在我想知道为什么我不能使用innerClassObject访问String testString。 不是testString一个全局变量,我不是在externalClass内创建了innerClass的实例。即“ StaticAndInnerClasses”,如果不可能的话,为什么要拥有内部类
内部类和静态内部类之间是有区别的。
静态内部类没有与外部类的任何实例相关联,因此为什么您不能访问封闭类的字段。
但是,必须使用外部类的实例来构造非静态内部类。 因此,您的测试代码如下所示:
OuterClass outer = new OuterClass();
InnerClass inner = outer.new InnerClass();//Yes, with that exact syntax!
编辑对于上面说的内容无法编译的人,这是当尝试直接实例化InnerClass
时来自Eclipse的确切消息:
无法访问类型为OuterClass的封闭实例。 必须使用类型为OuterClass的封闭实例来限定该分配(例如xxnew A(),其中x是OuterClass的实例)。
内部类内部代码可以在外部类引用的东西。
对于此玩具示例:
public class StaticAndInnerClasses {
String testString;
class InnerClass{
int x;
int y;
public void printString() {
changeCharacter();
System.out.println(testString);
}
}
static class InnerStaticClass{
int a=10;
int b=20;
}
public void changeCharacter(){
testString="Characters modified";
}
public static void main(String[] args){
StaticAndInnerClasses.InnerStaticClass statciClassObject=new StaticAndInnerClasses.InnerStaticClass();
StaticAndInnerClasses outerObject=new StaticAndInnerClasses();
StaticAndInnerClasses.InnerClass innerClassObject=outerObject.new InnerClass();
innerClassObject.printString();
}
}
因此,在内部类的代码中,您可以引用外部类的方法和字段,就像在方法printString()
所做的那样。 这不会将外部类的方法转换为内部类的方法,因此代码(在外部类main
)
innerClassObject.changeCharacter();
如您在评论中所引用,将无法正常工作。 实际上,它不会编译。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.