0

私は 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 を使用してコードをコンパイル/実行しています。

4

3 に答える 3

1

Eclipse では、「半焼き」のコードを実行できます。ここで問題なく動作する理由は、実行時にAbstractクラスの詳細に実際に依存することは決してないため、このタイプのコンパイル エラーが含まれていても問題にならないからです。

于 2013-11-04T12:43:19.417 に答える
0

Abstract非抽象メソッドを定義する必要があるため、クラスにはコンパイルエラーがあり、本体が必要です。abstract修飾子は、インターフェースの場合のみオプションです。

于 2013-11-04T11:31:46.383 に答える