仅当Test1.i
和Test1Scala.i
均为val
时才有效,否则会导致编译错误:“变量,我不能覆盖可变变量”。
package test
class Base1 {
private[test] var i = 0
}
class Child1Scala extends Base1 {
override var i = 1
}
可以使用Java绕过此限制
class Child1Java extends Base1 {
@Override public int i() {
return super.i();
}
@Override public void i_$eq(int value) {
super.i_$eq(value);
}
}
var
和val
都不起作用。它总是会导致编译错误:“ super可能不用于变量i”。但是如果没有super
,那里的方法将成为无限的尾部调用
class Base2 {
var i = 0
}
class Child2Scala extends Base2 {
override def i: Int = {
println("get")
super.i
}
override def i_=(value: Int): Unit = {
println("set")
super.i = value
}
}
同样,在Java中是合法的
class Child2Java extends Base2 {
@Override public int i() {
System.out.println("get i");
return super.i();
}
@Override public void i_$eq(int value) {
System.out.println("set i");
super.i_$eq(value);
}
}