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)方法:默认访问权限,protected
或public
可以正常工作。
Demo.