我无法理解如何在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.帮助。
P.S。我正在尝试创建自己的源自wicket WebPage的BaseWebPage,这是Java的常见做法
答案 0 :(得分: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()
}
所有辅助构造函数表单必须调用主要表单。从language specification(5.3.1构造函数定义):
除了主构造函数之外,类可能还有其他构造函数。这些 由def(this)(ps1)...(psn)= e形式的构造函数定义来定义。 这样的定义为封闭类引入了一个额外的构造函数 在形式参数中给出的参数列出了ps1,...,psn及其评估 由构造函数表达式e定义。每个形式参数的范围是 后续参数部分和构造函数表达式e。 构造函数 expression是自构造函数调用this(args1)...(argsn)或块 它以自构造函数调用开始
(强调我的)。