我已经学习java和oop几个星期了。
昨天我学习了内课和外课。我想知道当它们的名称完全相同时,如何从内部类访问outerclass的字段。
如下所示,当它们有不同的名称时,可以从内部类访问outerclass的字段。
public class OuterClass {
public String OuterName;
public OuterClass(String OuterName) {
this.OuterName = OuterName;
}
public class InstanceInnerClass {
public String InnerName;
public InstanceInnerClass(String InnerName) {
this.InnerName = InnerName;
}
// In this method, accessing field in outer and inner class is possible.
// when they have different name.
public void printAllName() {
System.out.printf("OuterName: %s, InnerName: %s\n", OuterName, InnerName);
}
}
}
当他们有相同的名字,我不知道如何访问这两个名字。
public class OuterClass {
public String name; // field which has same name
public OuterClass(String name) {
this.name = name;
}
public class InstanceInnerClass {
public String name; // field which has same name
public InstanceInnerClass(String name) {
this.name = name;
}
public void printAllName() {
// What should be written in this code
// to print both name fields from OuterClass and InnerClass
System.out.printf("OuterName: %s, InnerName: %s\n", name, name);
}
}
}
2条答案
按热度按时间ffx8fchx1#
田野
OuterClass
可在中访问InnerClass
通过OuterClass.this
:测试:
印刷品:
n3h0vuf22#
简单地做
OuterClass.this
以及OuterClass
例如,您想要访问的OuterClass.this.OuterName
. 在您的代码中,如下所示:当您有两个同名字段,一个在内部类,另一个在外部类(即阴影),并且您试图从内部类访问该字段时,编译器假定您想从内部类访问该字段,而忽略外部类的另一个字段。否则,就无法选择使用哪个变量。
阴影
如果特定作用域(如内部类或方法定义)中的类型声明(如成员变量或参数名)与封闭作用域中的另一个声明具有相同的名称,则该声明将隐藏封闭作用域的声明。不能仅通过名称引用带阴影的声明。