我试图覆盖看起来有点像这个
的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,因为它正在被扩展的程序中,如果已经发布它将无法正常工作
答案 0 :(得分:2)
您不在Scala中使用@Override
;只有Java编译器才知道它。在Scala中使用override
代替。
protected String string;
中的 ExampleJava
是一个字段,因此根本无法覆盖它。如果您希望它可以覆盖,则需要编写
private String string;
protected String string() {
return string;
}
代替。您还需要ExampleScala
中的实际实现。
答案 1 :(得分:1)
你不能@Override
字段成员,你只能覆盖方法,它只是一个注释,可以确保在编译时天气你是否真的重写方法
表示方法声明旨在覆盖超类中的方法声明。如果使用此批注类型注释方法但不覆盖超类方法,则编译器需要生成错误消息。