簡體   English   中英

在Scala特性中調用覆蓋Java類A的重寫方法,由Java類B實現

[英]Invoke overridden method in scala trait extending java class A, implemented by java class B

是否可以在擴展了A類的Scala類中通過另一個擴展B類並實現特征的B類來調用方法?

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));
}

這有效:

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(此答案中的更多信息: 在Java中使用Scala特征和已實現的方法 ,也可以在此處: http : //lampwww.epfl.ch/~michelou/scala/using-scala-from-java .html )-應該將具有方法實現的特征翻譯為Java作為接口,並將具有方法實現的特征翻譯為Java抽象類。

您是否嘗試用java創建B類,如下所示:

public class B implements T {}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM