匿名类的方法出乎意料地行为

kur*_*kan 5 java

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

匿名类的方法出乎意料地行为.如何制作方法sout打印"sout",现在打印"main"?

das*_*ght 3

问题是那String getName()private

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

然而,匿名派生类不仅是派生类,而且它还是一个内部类。因此,该类可以访问外部类的私有成员。这就是为什么main被打印出来,而不是sout.

要使这项工作正常进行,您所需要做的就是使该方法成为非私有的:默认访问、protected或 都public可以正常工作。

演示。