[英]override/redefine var with a def in subclass, no compiler error
为什么我能够使用 def 和另一个 def 重新定义子类中的 var。 为什么编译器不抱怨?
abstract class Person {
var age: Int
}
class Employee extends Person {
def age = 5 // does not allow override def age = 5, though
def age_=(a: Int) = {
age = a // infinite recursion
}
}
规范说 var 声明与声明两个方法相同。
像往常一样,override 关键字是可选的。
scala> abstract class B { var x: Int }
defined class B
scala> class C extends B { override def x = 42 ; def x_=(i: Int) = ??? }
defined class C
链接的答案混淆了声明和定义。
我们来看一下反编译出来的Java代码(使用javap your.class):
public abstract class Person {
public abstract int age();
public abstract void age_$eq(int);
public Person();
}
public class Employee extends Person {
public int age();
public void age_$eq(int);
public Employee();
}
如您所见,您的代码导致age
被标记为抽象,因此您可以实现它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.