首页 文章

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

提问于
浏览
0

是否有可能在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

    这有效:

    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 - > Scala - > 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 {}
    

相关问题