首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套类匿名类

嵌套类匿名类
EN

Stack Overflow用户
提问于 2012-03-30 18:55:36
回答 3查看 81关注 0票数 2
代码语言:javascript
复制
public class A {
  protected int x;
  public A(int x) { this.x = x; }
  public void g() { System.out.println(x); }
  public void h() { System.out.println(x + 10); }
}
public class B {
  public void f() {
  (new A(2) {
    public void g() {
      h();
    }
   }).g();
  }
}

public static void main(String[] args) {
  new B().f();
}

有人能帮我理解代码中的这一行吗:

代码语言:javascript
复制
new A(2) { public void g() {h();} }).g();

我不明白他是不是在这里定义了一个匿名类??在匿名中,他如何引用A.h()?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-30 19:01:23

他创建了一个匿名类并覆盖了g()。这和你使用Runnableoverride run是一样的。

代码语言:javascript
复制
(new A(2) { public void g() {h();} }).g();

手段

代码语言:javascript
复制
class C extends A
{
    public C()
    {
        super(2);
    }

    @Override
    public void g()
    {
        this.h();
    }
}

(new C()).g();  // or C c = new C(); c.g();
票数 3
EN

Stack Overflow用户

发布于 2012-03-30 19:00:20

这一行创建了一个未命名的类,它覆盖了父类的g()方法,因此它做了一件新的事情:调用h()。但是,它会立即对这个未命名的类调用g()方法。

票数 4
EN

Stack Overflow用户

发布于 2012-03-30 19:00:55

您引用的这一行定义了一个新的匿名类,它extends AOverrides g(),然后调用它。

由于匿名类扩展了A,因此它包含了h()的定义,因此可以调用它

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9941604

复制
相关文章

相似问题

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