Java 中的类层次结构:
接口(interface):集群、分类
Kluster 类层次结构如下所示
Cluster <- ,
+-- Kluster
Classify <- '
文件:oop/Cluster.java
package oop;
public interface Cluster {
public String HELLO = "hello";
}
文件:oop/Kluster.java
package oop;
interface Classify {
public String GOODBYE = "good bye";
}
public class Kluster implements Cluster, Classify {
}
文件:oop/KlusterMain.java
package oop;
public class KlusterMain {
public static void main(String[] args) {
System.out.println(Kluster.HELLO);
System.out.println(Kluster.GOODBYE);
}
}
到目前为止,一切都按预期进行。我可以打印 HELLO 和 GOODBYE 常量。
现在,当我尝试从 Scala 编译器访问它们时,出现错误。
文件:oop/cluster.scala
package oop
object cluster {
def main(args: Array[String]) {
val k = new Kluster
println(Cluster.HELLO)
println(Classify.GOODBYE)
println(Kluster.HELLO) // <- this is the problematic line
}
}
错误:
Scala Problem
value HELLO is not a member of object oop.Kluster
/scala-snippets/src/main/scala/oop/cluster.scala
line 8
为什么 Scala 不能解析 Kluster 对象同时实现 Cluster 和 Classify 接口(interface)的层次结构?
最佳答案
您知道将常量放入接口(interface)中以在实现类时使用它们是一种糟糕的方法,不是吗?在 Java 中,您使用带有私有(private)构造函数的 final
类,并在需要时使用 import static
来缩短常量名称。在 Scala 中,您使用 object
和导入。但是 Scala 没有静态字段的概念——它有正确参与继承的对象。将 Java 中的静态字段与适当的面向对象系统统一起来是不可能的,因此在 Scala 中,您不能使用子类中的静态成员(字段和方法)。
另见 here .
关于java - Scala 无法解析继承的 Java 接口(interface)常量成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22628298/