【问题标题】:is it possible to call a class constructor and define it's body at the same time? [duplicate]是否可以同时调用类构造函数并定义它的主体? [复制]
【发布时间】:2014-12-17 03:40:07
【问题描述】:

在下面的代码sn-p中,我知道在Counter c = new Counter();这个语句中,
声明了一个新的引用变量,并且在调用类构造函数时,new 运算符将一个内存位置放入其中,但我不明白其余部分!

实际上是否可以在其中定义构造函数主体,在调用时使用{ }
是否可以在构造函数中定义方法?

public class Counter {
  private int counter = 0;

  public int count() {
    return counter++;
  }
}

然后在另一个类中我们有:

Counter c = new Counter() {   
  public int count() {
    super.count();   
    return super.count();   
  }
}

【问题讨论】:

标签: java oop constructor initialization


【解决方案1】:

您正在查看从Counter 派生的匿名类派生

派生类的主体包含在大括号中。正在调用Counter 的默认构造函数(您不能为匿名类做任何其他事情)。 count() 方法正在被覆盖。

以上内容更常见于接口,并为 Java 提供类似于闭包的东西(至少在 java 8 之前)

【讨论】:

    【解决方案2】:

    第二个 sn-p 显示了一个扩展 Counter 的匿名内部类。它没有定义构造函数。

    您不能在构造函数中定义方法。您也不能为匿名内部类定义构造函数。

    【讨论】:

    • 但是一个可以使用带有匿名类的初始化块。
    • @user2864740:是的,你可以这样做。不过,这与定义构造函数并不完全相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 2017-02-08
    • 2011-06-23
    • 2022-01-08
    相关资源
    最近更新 更多