オーバーライドされたメソッドのアクセシビリティを広げる必要があるのはなぜですか? スーパークラスに保護されたメソッドがあり、サブクラスに public と同じメソッドがある場合。なぜ起こるべきですか?
3 に答える
方法が違います!サブクラスはプライベート メソッドを継承しません。したがって、あなたはまったく「オーバーライド」していません。スーパークラスのプライベート メソッドと同じ名前のメソッドを定義しているだけです。
class A
{
private void myMethod() { }
}
class B extends A
{
public void myMethod() { } // a completely different method. Has nothing to do with the above method. It is not an override.
}
オブジェクト階層では、JVM は常に Overriden メソッドを実行するためです。オーバーライドされたメソッドにアクセスできない場合、それは役に立ちません。
public class A{
void A(){}
}
public class B extends A{
private void A(){} //this makes no sence and its impossible
PSV main(String ..){
A a = new B();
a.A(); //error as JVM cannot call overriden method which is private.
}
}
private または static として宣言されたメソッドはオーバーライドできません!
注釈 @Override は、メソッド宣言がスーパークラスのメソッド宣言をオーバーライドすることを意図していることを示します。メソッドにこの注釈型の注釈が付けられているが、スーパークラス メソッドをオーバーライドしていない場合、コンパイラはエラー メッセージを生成する必要があります。
メソッドをオーバーライドするたびに使用すると、2 つのメリットがあります。このように、メソッド名のつづりを間違えたり、パラメーターを正しく一致させないなどのよくある間違いを犯した場合、メソッドが実際にはオーバーライドしていると思うようにオーバーライドしないことが警告されます。第 2 に、メソッドがいつ上書きされるかがより明確になるため、コードが理解しやすくなります。Java 1.6 では、メソッドが同じ利点のためにインターフェースを実装するタイミングをマークするために使用できます。