Je me demandais si elle fait sens pour déclarer une méthode privée comme définitive, et j'ai pensé qu'il ne fait pas de sens. Mais j'ai imaginé il y a une exclusivité de la situation et écrit le code pour le comprendre:
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();
}
}
Il a compilé et travaillé. "Je devrais faire touchMe() final" je pensais et il l'a fait:
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();
}
}
et il fonctionne aussi et me dit
chicout@chicout-linlap:~$ java Boom
super::I am not overridable!
sub::You suck! I overrided you!
pourquoi?