何らかの理由で、定義されているパッケージの外部で抽象クラスを実装できないようです。package1 の抽象クラスは、package2 のクラスに実装できません。なぜこれは合法的な Java ではないのですか?
package com.stackoverflow.abstraction.package1;
abstract public class BaseClass {
abstract Long foo();
}
package com.stackoverflow.abstraction.package1;
public class Implement1 extends BaseClass {
@Override
Long foo() {
return null;
}
}
package com.stackoverflow.abstraction.package2;
import com.stackoverflow.abstraction.package1.BaseClass;
/** Compiling this class will output
* - Implement2 is not abstract and does not override abstract method foo() in BaseClass
* - error: method does not override or implement a method from a supertype
*/
public class Implement2 extends BaseClass {
@Override
Long foo() {
return null;
}
}
実行中: OS X 10.6.8 - Java(TM) SE ランタイム環境 (ビルド 1.6.0_31-b04-415-10M3646) - OpenJDK ランタイム環境 (ビルド 1.7.0-u4-b13-20120301) 両方の Java バージョンを試しました。もちろん、同時にではありません:)