Il richiamo di metodi di istanza non finali nei costruttori rischia il downcasting da un costruttore a un metodo sottoposto a override in quanto tale:
public class Start {
public static void main(String[] args) {
try {
ClassB obj = new ClassB();
} catch(Exception e) { }
}
static class ClassA {
ClassA() { initSomething(); }
void initSomething() {
System.out.println("ClassA:: initSomething()...");
}
}
static class ClassB extends ClassA {
@Override
void initSomething() {
System.out.println("ClassB:: initSomething()...");
}
}
}
Ora fai affidamento su ogni sottoclasse per richiamare super.initSomething()
.
In molti dei costruttori che ho visto, i metodi di istanza sovrascrivibili sono richiamati. Inoltre, non ho mai visto un metodo contrassegnato come final
.
Sono stupidamente pedante avendo una politica di non invocare metodi di istanza non finali nei costruttori? In realtà, questo downcasting è davvero un caso limite. Cosa fanno i programmatori esperti?