首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >匿名类中的超级(Java)

匿名类中的超级(Java)
EN

Stack Overflow用户
提问于 2018-08-22 03:56:01
回答 2查看 247关注 0票数 0

假设我们有代码:

代码语言:javascript
运行
复制
public class Solution {
private String name;
private String surname;

Solution(String name, String surname) {
    this.name = name;
    this.surname = surname;
}
private String getPrivate() { return name; }
public String getPublic() { return surname; }

private void sout() {
    new Solution("Anonim private", "Anonim public") {
        void printName() {
            System.out.println(getPrivate());               // Main   private
          //System.out.println(this.getPrivate());          // can't compile
            System.out.println(super.getPrivate());         // Anonym private
            System.out.println(Solution.this.getPrivate()); // Main   private

            System.out.println("\n");

            System.out.println(getPublic());                // Anonym public
            System.out.println(this.getPublic());           // Anonym public
            System.out.println(super.getPublic());          // Anonym public
            System.out.println(Solution.this.getPublic());  // Main   public

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

评论-我们的输出( intellij idea)

问:为什么super.getPrivate()返回字符串"Anonym private"

如果我们查看Java文档,我们将看到

如果您的方法重写了它的超类方法之一,则可以通过使用关键字super来调用被重写的方法。

但在这种情况下,获得了super word的另一种含义:内部类的实例。您可以添加以下内容进行检查:

代码语言:javascript
运行
复制
System.out.println(super.getClass());
System.out.println(this.getClass());
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51955823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档