Scala无法解析inheritance的Java接口常量成员

Java中的类层次结构:

接口: 集群分类

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对象同时实现ClusterClassify接口的层次结构?

你知道将常量放入接口以在实现类中使用它们是不好的方法,不是吗? 在Java中,您使用带有私有构造函数的final类,并使用import static来缩短常量名称(如果需要)。 在Scala中,您使用object和导入。 但是Scala没有静态字段的概念 – 它有对象而不是正确地参与inheritance。 使用适当的面向对象系统将Java中的静态字段统一是不可能的,因此在Scala中,您不能使用子类中的静态成员(字段和方法)。

另见这里 。