舉例來說:
1. Java class J1
public class J1 { public void print() { System.out.println("J1.print..."); } }
2. Scala class S1 繼承Java class J1
class S1 extends J1 { override def print = { println("S1.print..."); } }3. Java class J2 繼承 Scala class S1
public class J2 extends S1 { @Override public void print() { System.out.println("J2.print..."); } }4. Scala class S2 繼承 Scala class J2
class S2 extends J2 { override def print = { println("S2.print..."); } }
5.測試class
public class Test { static public void main(String[] args) { new J1().print(); new J2().print(); new S1().print(); new S2().print(); } }
繼承的方式 J1 <- S1 <- J2 <- S2
先compile Java程式或先compile Scala程式,好像都不對,因為有cross reference的關係。
其實,scala會parsing Java source code,會預先知道之後會產生的javac會產生的class,運用這種方式,我們可以使用的解決方式如下:
1.使用scalac compile Scala code:此時需要將 java的source code加進去,讓scalac知道有這些 java source code。此步驟會產生所有Scala的classes(雖然有繼承自Java的scala class,此時仍會產生)
會產生以下的classes(注意:此時J1.class, J2.class都尚未產生)
2.使用 javac compile java source code(注意此時需要將scala-library.jar放入classpath中)
沒有將scala-library.jar放入classpath中,會產生以下的錯誤
3.執行:使用 java 執行,scalac所compile出來的classfile與javac 所產生的classfile是相同的,我們可以把Scala class當成一般正常的 Java class。
注意:在執行時,同樣需要將 scala-library.jar 要放入classpath中
沒有留言:
張貼留言