Я задавался вопросом, имеет ли смысл объявлять частный метод как окончательный, и я думал, что это не имеет смысла. Но я представил себе исключительную ситуацию и написал код, чтобы понять это:
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() final" Я подумал и сделал это:
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!
почему?