10

親クラスは抽象化されておらず、抽象化することもできません。オーバーロードするメソッドは保護されているため、そこでインターフェイスを使用することはできません。

これら2つの制限を念頭に置いて、それを行うことは可能ですか?

4

3 に答える 3

8

メソッドを強制的にオーバーライドすることはできません-それが抽象メソッドの目的です(オプションではないと述べました)。

1 つの可能性は、基本クラスのメソッドにUnsupportedOperationException. 次に、サブクラスはそれをオーバーライドして、エラーがスローされないようにする必要があります。そうすれば、少なくともメソッドがオーバーライドされているかどうかを検出できます。

例えば:

public class Father {
    public void method ( ) {
        throw new UnsupportedOperationException( );
    }
}

public class Child1 extends Father {

}
public class Child2 extends Father {
    public void method ( ) {
        // Do something useful here...
    }
}

を呼び出すChild1.method()と がスローされ、のUnsupportedOperationExceptionがオーバーライドされていないことが示されます。を呼び出しても例外はスローされません。つまり、オーバーライドされいます。Fathermethod()Child2.method()method()

于 2012-12-20T19:45:41.957 に答える
3

親から UnsupportedOperationException をスローできます。これはコンパイル時には役に立ちませんが、実行時には役に立ちます。

于 2012-12-20T19:45:21.243 に答える
2

abstract はオプションではないため、メソッドにNotImplementedException. これは、より明確な例外UnsuppotedOperationExceptionです。
注:これにより、コードのコンパイルが妨げられることはなく、実行時にのみ例外がスローされます。

Public Clazz {
    public void methodToOverride(){
        Throw new NotImplementedException();
    }
}

いくつかの実装例:
Apache
Sun
sharkysoft.com

于 2012-12-20T19:46:14.010 に答える