繁体   English   中英

在子类中使用 def 覆盖/重新定义 var,没有编译器错误

[英]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
  }

}

为什么在 Scala 中用def覆盖var是不可能的有关

规范说 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM