4

我无法理解如何在 Java 上开发类似于以下内容的 Scala 代码:

public abstract class A {
   protected A() { ... }
   protected A(int a) { ... }
}

public abstract class B {
   protected B() { super(); }
   protected B(int a) { super(a); }
}

public class C extends B {
   public C() { super(3); }
}

虽然很清楚如何开发C类,但我不知道如何接收B。请帮助。

PS我正在尝试创建自己的从wicket WebPage 派生的BaseWebPage,这是Java 的常见做法

4

1 回答 1

7

你的意思是这样的:

abstract class A protected (val slot: Int) {
    protected def this() = this(0)
}

abstract class B protected (value: Int) extends A(value) {
    protected def this() = this(0)
}

class C extends B(3) {
}

AFAIK,没有办法从一种辅助形式绕过主要构造函数,即以下内容不起作用:

abstract class B protected (value: Int) extends A(value) {
    protected def this() = super()
}

所有辅助构造函数形式都必须调用主构造函数。从语言规范(5.3.1 构造函数定义):

除了主构造函数之外,一个类可能还有其他构造函数。它们由 def this(ps1)...(psn) = e 形式的构造函数定义。这样的定义为封闭类引入了一个额外的构造函数,其参数在形式参数列表 ps1、...、psn 中给出,其求值由构造函数表达式 e 定义。每个形式参数的范围是后续参数部分和构造函数表达式 e。构造函数表达式是自构造函数调用 this(args1)...(argsn) 或以自构造函数调用开头的块

(强调我的)。

于 2013-03-25T19:31:26.500 回答