[英]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.