public class Solution {
    private String name;

    Solution(String name) {
        this.name = name;
    }

    private String getName() {
        return name;
    }

    private void sout()
    {
        new Solution("sout")
        {
            void printName()
            {
                System.out.println(getName());
            }
        }.printName();
    }

    public static void main(String[] args) {
        new Solution("main").sout();
    }
}

匿名类的方法的行为异常。
如何使方法sout打印“sout”,现在打印“main”?

最佳答案

问题在于String getName()private

这意味着派生类的方法无法访问它。

但是,匿名派生类不仅是派生类,而且还是内部类。因此,该类可以访问外部类的私有(private)成员。这就是为什么打印main而不是sout的原因。

完成此工作所需要做的就是使该方法成为非私有(private)方法:默认访问权限,protectedpublic可以正常工作。

Demo.

10-04 20:11