6

..もしそうなら、動作は何ですか?最近見たコードでこれに出くわしましたが、非常に混乱しています。私はJavaコンパイラを持っていないので、簡単には答えられません。これが私が話していることの大まかな例です。この結果はコンパイル エラーになると思いますが、私の知る限り、これは動作するコード ベースによるものです。

abstract class Base {
    ...
    abstract boolean foo(String arg);

}

class Sub extends Base {
    ...
    boolean foo(String arg) {
        if(condition) 
            return true;
        else 
            return super.foo(arg); //<-- <boggle/>
    }
}
4

5 に答える 5

18

いいえ、それがスーパークラスで抽象的である場合、それを呼び出すことはできません。コードをコンパイルしようとすると(他のコードは修正されています)、次のエラーが発生します。

Test.java:13: abstract method foo(String) in Base cannot be accessed directly
            return super.foo(arg); //<-- <boggle/>
                        ^
于 2011-02-15T18:09:44.160 に答える
3

それはコンパイルされません。抽象メソッドを呼び出すことはできません。

于 2011-02-15T18:11:03.813 に答える
2

あなたの例をEclipseに投げて編集して、実際にコンパイルすると、このエラーが発生します:

「型 Base の抽象メソッド foo(String) を直接呼び出すことはできません」

「動作するコードベース」から来ていると確信していますか?

于 2011-02-15T18:12:19.710 に答える