プライベートメソッドをfinalとして宣言するのが理にかなっているのだろうと思っていました。しかし、私は独占的な状況があると想像し、それを理解するコードを書いた:なぜ内部クラスはプライベートな最終メソッドをオーバーライドできますか?
public class Boom {
private void touchMe() {
System.out.println("super::I am not overridable!");
}
private class Inner extends Boom {
private void touchMe() {
super.touchMe();
System.out.println("sub::You suck! I overrided you!");
}
}
public static void main(String... args) {
Boom boom = new Boom();
Boom.Inner inner = boom.new Inner();
inner.touchMe();
}
}
それはコンパイルされ、働いた。 "私は)(touchMeを行い、最終的なはずです" 私は考えて、それをやった:
public class Boom {
private final void touchMe() {
System.out.println("super::I am not overridable!");
}
private class Inner extends Boom {
private void touchMe() {
super.touchMe();
System.out.println("sub::You suck! I overrided you!");
}
}
public static void main(String... args) {
Boom boom = new Boom();
Boom.Inner inner = boom.new Inner();
inner.touchMe();
}
}
、それはまた、動作してくれ
[email protected]:~$ java Boom
super::I am not overridable!
sub::You suck! I overrided you!
理由を告げますか?
「隠れている」または「シャドウイン」などです。なぜ外部クラスを拡張するのがちょっと悪いのか(つまりenumであっても)/Try 'Boom inner = boom.new Inner();' –
@Overrideアノテーションを使用する理由の良い例です。実際にメソッドをオーバーライドしていることを確認してください – Shawn
'super ...'を2回書いてはいけませんか? *更新*いいえ。そうですか。 – DerMike