scala - 无法覆盖java类的受保护变量

时间:2014-03-28 16:40:34

标签: java scala

我试图覆盖看起来有点像这个

的Java类
public class ExampleJava {
  public ExampleJava(String string) {

  }

  protected String string;
}

当我使用

class ExampleScala(string : String) {
  @Override
  protected override def string : String
}
在Scala中,编译器会给出错误:

Error:(5, 7) overriding method string in class ExampleScala of type => 
java.lang.String;
variable string in class ExampleJava of type net.java.lang.String has incompatible    
type;
(Note that method string in class ExampleJava of type => java.lang.String is 
abstract,
and is therefore overridden by concrete variable string in class ExampleJava of type 
java.lang.String)
class ExampleScala(material : Material) extends ExampleJava(string : String) {
  ^

更新:我无法修改ExampleJava,因为它正在被扩展的程序中,如果已经发布它将无法正常工作

2 个答案:

答案 0 :(得分:2)

  1. 您不在Scala中使用@Override;只有Java编译器才知道它。在Scala中使用override代替。

  2. protected String string;中的
  3. ExampleJava是一个字段,因此根本无法覆盖它。如果您希望它可以覆盖,则需要编写

    private String string;
    
    protected String string() {
        return string;
    }
    
  4. 代替。您还需要ExampleScala中的实际实现。

答案 1 :(得分:1)

你不能@Override字段成员,你只能覆盖方法,它只是一个注释,可以确保在编译时天气你是否真的重写方法

  

表示方法声明旨在覆盖超类中的方法声明。如果使用此批注类型注释方法但不覆盖超类方法,则编译器需要生成错误消息。