私は Java SE 7 認定試験の勉強をしていて、継承とアクセス修飾子について退屈な練習をしています。
しかし、継承を適用すると予期しない動作が発生します。私の基本パッケージcom.testpkg
には、抽象クラスがあります。
package com.testpkg;
public abstract class Abstract {
public int test();
}
メソッドのabstract
修飾子を自発的に省略したことに注意してください。test()
Abstract
次に、 package で拡張する具象クラスがありますcom.testpkg.sub
。
package com.testpkg.sub;
public class Concrete extends Abstract {
public int test() {
return 0;
}
}
以下を使用してこのクラスをテストします。
package com.testpkg;
import com.testpkg.sub.Concrete;
public class TestMain {
public static void main(String[] args) {
Abstract c = new Concrete();
System.out.println(c.test());
}
}
これをコンパイルしようとすると、明らかに 2 つのエラーが発生します。
The method test() requires a body instead of a semicolon
しかし、テストクラスを実行する0
と、コンソールに出力されます!
これは私には非常に奇妙に思えます。クラスtest()
で間違って宣言されていてもコードが機能する理由を説明できますか?Abstract
注: Eclipse IDE を使用してコードをコンパイル/実行しています。