考虑以下代码
class OuterClass{ class InnerClass{ int x; int y; void calculateX(){ x = y+z;//I want to access the y field of the outer class } void printX(){ print(); } } int y; int z; InnerClass instance; OuterClass(int y,int z){ this.y = y; this.z = z; instance = new InnerClass(); instance.y = 10; instance.calculateX(); instance.printX(); } void print(){ System.out.println("X:"+instance.x+"\nY:"+y+"\nZ:"+z+"\n"); } }
如果名称重叠,如何访问外部类的字段?
我尝试了以下方法:
x=super.y; x=OuterClass.y;
并收到编译错误。
现实生活中会不会发生这种情况?
最好的解决方案是为字段赋予有意义的名称和不同的名称。但这并不总是可能的…
要获取字段或外部实例,您可以使用
OuterClass.this.y;
或者该字段是静态的
OuterClass.y;
注意:y通常是缩写this.y(取决于y实际定义的位置)
y
this.y
同样,您需要调用外部类的实例方法。
OuterClass.this.method();
要么
OuterClass.method(); // static
注意:在Java 8中,您有可能是基于实例的方法引用。例如
list.stream().filter(OuterClass.this::predicate);