親クラスは抽象化されておらず、抽象化することもできません。オーバーロードするメソッドは保護されているため、そこでインターフェイスを使用することはできません。
これら2つの制限を念頭に置いて、それを行うことは可能ですか?
親クラスは抽象化されておらず、抽象化することもできません。オーバーロードするメソッドは保護されているため、そこでインターフェイスを使用することはできません。
これら2つの制限を念頭に置いて、それを行うことは可能ですか?
メソッドを強制的にオーバーライドすることはできません-それが抽象メソッドの目的です(オプションではないと述べました)。
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
がオーバーライドされていないことが示されます。を呼び出しても例外はスローされません。つまり、オーバーライドされています。Father
method()
Child2.method()
method()
親から UnsupportedOperationException をスローできます。これはコンパイル時には役に立ちませんが、実行時には役に立ちます。
abstract はオプションではないため、メソッドにNotImplementedException
. これは、より明確な例外UnsuppotedOperationException
です。
注:これにより、コードのコンパイルが妨げられることはなく、実行時にのみ例外がスローされます。
Public Clazz {
public void methodToOverride(){
Throw new NotImplementedException();
}
}
いくつかの実装例:
Apache
Sun
sharkysoft.com