小编典典

Java-如果字段具有相同的名称,则如何访问外部类字段

java

考虑以下代码

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;

并收到编译错误。

现实生活中会不会发生这种情况?


阅读 217

收藏
2020-11-30

共1个答案

小编典典

最好的解决方案是为字段赋予有意义的名称和不同的名称。但这并不总是可能的…

要获取字段或外部实例,您可以使用

OuterClass.this.y;

或者该字段是静态的

OuterClass.y;

注意:y通常是缩写this.y(取决于y实际定义的位置)

同样,您需要调用外部类的实例方法。

OuterClass.this.method();

要么

OuterClass.method(); // static

注意:在Java 8中,您有可能是基于实例的方法引用。例如

 list.stream().filter(OuterClass.this::predicate);
2020-11-30