为什么在调用构造函数时不能访问OuterClass.this?

时间:2017-08-17 19:42:08

标签: java

在为算法编写解释性GUI时,我偶然发现了一些事情。

我完全理解为什么以下不起作用:

public class Superclass {
    public Superclass (int someValue) {
        // do something
    }
}

// new file

private class Subclass extends Superclass {
    int someValue; 
    public Subclass () {
        super (this.someValue);
        this.someValue = 0;
    }
}

子类尚未完全初始化,因此使用this毫无意义。

我也理解为什么这不起作用:

public class Superclass {

    public Superclass (int someValue) {
        // do something
    }

}

// new file

public class OuterClass {

    private class InnerSubclass extends Superclass {
        int someValue;
        public InnerSubclass () {
            super (this.someValue);
            this.someValue = 0;
        }

    }
    // some code of OuterClass
}

这种情况不会因子类是内部类的唯一事实而改变。

我不明白为什么这不起作用:

public class Superclass {

    public Superclass (int someValue) {
        // do something
    }

}

// new file

public class OuterClass {

    int someValue;

    private class InnerSubclass extends Superclass {
        public InnerSubclass () {
            super (OuterClass.this.someValue);
        }
    }

    public OuterClass () {
        this.someValue = 0;
    }
    // some code of OuterClass
}

请注意,我使用的是OuterClass.this,而不是this的{​​{1}}。需要初始化外部类对象,以使内部类对象甚至可以创建。我能想到的唯一情况是,如果内部类是静态的,那么InnerSubclass就不能被引用了。

知道为什么上面的代码仍会产生OuterClass.this

0 个答案:

没有答案