java - 匿名类的方法行为异常

标签 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();
    }
}

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

最佳答案

问题是 String getName()private

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

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

要使此工作正常进行,您需要做的就是使该方法成为非私有(private)的:默认访问、protectedpublic 都可以正常工作。

Demo.

关于java - 匿名类的方法行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36107560/

相关文章:

java - 如何让这段代码进入循环,以便每次都询问用户输入,直到结果为 "kill"?

Java:第一个索引在二维数组中代表什么?

java - jodconverter 找不到 officeHome,在 centOS 5 中使用 docsplit

java - Android:微调器显示标题栏 1/2 秒

java - Eclipse 链接替代 @PreUpdate 注释?

java - 为maven生成jar

java - 模拟 Android REST 连接的最佳方式

java - 将 XMLgregorianCalender 默认格式更改为 "yyyyMMdd"

Java Blowfish 解密不返回原始字符串

java - 如何从 Firebase Firestore 访问数组数据?