在scala trait中调用重写的方法,扩展java类A,由java类B实现

时间:2014-08-24 19:40:14

标签: java scala

是否可以在Scala类中创建一个方法,扩展类A,通过另一个类B扩展类A并实现特征?

public class A {
    public int foo(int someData) {
        return -1;
    }
}

如果我使用Scala类扩展特征,则会调用特征中的方法。在java中它没有。

trait T extends A {
    override def foo(int: someData) = {
        if data < 10 {
            return data * 2
        } else {
            return 0
        }
    }
}

这是我从下面调用foo()的类:

public class B extends A implements T {}

这应该打印44而不是-1

public class Main {
    B b = new B();
    System.out.println(b.foo(22));
}

1 个答案:

答案 0 :(得分:0)

这有效:

scala> trait A {
     | def foo(someData:Int) = -1
     | }
defined trait A

scala> trait T extends A {
     | override def foo(someData:Int) = if (someData<10) someData*2 else 0
     | }
defined trait T

scala> class B extends T
defined class B

scala> val b = new B
b: B = B@4e009c5e

scala> b.foo(3)
res4: Int = 6

顺便说一下,根据你自己的定义,b.foo(22)会打印0而不是44。

更新:刚才意识到你的意思是Java - &gt; Scala - &gt; Java继承。我的回答只与Scala有关。原则上同样应该适用于Java(在这个答案中更多关于它:Using Scala traits with implemented methods in Java以及此处:http://lampwww.epfl.ch/~michelou/scala/using-scala-from-java.html) - 具有方法实现的特征应该被转换为Java作为接口和特征方法实现为抽象类。

您是否尝试在java中创建B类:

public class B implements T {}