在Java中,this/super关键字可以代表类/枚举以外的任何东西吗?

发布于 2024-10-13 03:39:05 字数 344 浏览 6 评论 0原文

我注意到:

class A {
    ClassB b = new ClassB() { // anonymous class
        /* some expression using this */
    }
}

每当我在匿名类中使用 this 关键字时,this 都会引用封闭的外部类/枚举,而不是匿名类。

这是否意味着 this 永远不能代表匿名类?只是“普通”类和枚举?

另外,thissuper 可以代表一个接口吗?

I've noticed that:

class A {
    ClassB b = new ClassB() { // anonymous class
        /* some expression using this */
    }
}

Whenever I use the this keyword inside an anonymous class, the this refers to the enclosing outer class/enum and not to the anonymous class.

Does this mean this can never represent an anonymous class? Just "normal" classes and enums?

Also, can this or super represent an interface?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

辞慾 2024-10-20 03:39:05

您最初的假设是错误的 - this 始终代表当前实例,即当前类的实例,即使它是匿名的。

Your initial assumption is wrong - this always represents the current instance, that is the instance of the current class, even if it's anonymous.

明月松间行 2024-10-20 03:39:05

您关于使用 this 的声明不正确。当您在匿名类中使用 this 时,它始终引用匿名类。它永远不会引用封闭的外部类,除非您使用 OuterClassName.this

thissuper 永远不能表示接口,因为接口不能具有已定义的方法。

Your statement about using this is incorrect. When you use this inside an anonymous class, it always refers to the anonymous class. It never refers to the enclosing outer class unless you use OuterClassName.this.

this or super can never represent an interface, since an interface cannot have defined methods.

驱逐舰岛风号 2024-10-20 03:39:05

在 Java 中,this 始终是当前类,即使它是匿名类。不,thissuper 不能表示接口。

In Java this is always the current class even if it is an anonymous class. No, this or super cannot represent an interface.

青芜 2024-10-20 03:39:05

你的匿名类总是扩展另一个类。即使您显式实现接口,您也是在扩展 java.lang.Object,并且只能通过 super 调用 java.lang.Object 的方法> 来电。

Runnable r = new Runnable() {
    public void run() {
        super.run(); // Error: run() is not a method of java.lang.Object
        super.toString(); // OK: toString() is inherited from java.lang.Object
    }
};

Your anonymous class always extends another class. Even if you explicitly implement an interface, you are extending java.lang.Object and you can only call methods of java.lang.Object via super calls.

Runnable r = new Runnable() {
    public void run() {
        super.run(); // Error: run() is not a method of java.lang.Object
        super.toString(); // OK: toString() is inherited from java.lang.Object
    }
};
心的位置 2024-10-20 03:39:05

使用内部类中的A.this

它不能表示接口,因为您不能在接口内定义任何非静态类,因为永远不会有接口的实例。

编辑:通过添加评论中的信息进行澄清。

Use A.this from the inner class.

And it cannot represent an interface, because you cannot define anynomous non-static classes within interfaces, because there wil never be an instance of the interface.

EDIT: Clarified by adding info from the comment.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文