Ho una super classe astratta A con un metodo doSomething()
. Una sottoclasse di A
deve implementare doSomething()
, ma esiste anche un codice comune che dovrebbe essere chiamato ogni volta che una sottoclasse chiama doSomething()
. So che questo potrebbe essere realizzato così:Come assicurarsi che un determinato metodo venga chiamato in super-classe astratta dal metodo in sottoclasse (Java)
public class A {
public void doSomething() {
// Things that every sub-class should do
}
}
public class B extends A {
public void doSomething() {
super.doSomething();
// Doing class-B-specific stuff here
...
}
}
Sembra che ci siano tre problemi con questo, però:
- Il metodo firme devono corrispondere, ma potrei voler restituire qualcosa in sub- solo metodi di classe, ma non nella super-classe
- Se faccio astratto A.doSomething(), non posso fornire un'implementazione (comune) in A. Se non lo faccio astratto, non posso forza la sottoclasse per implementarla.
- Se si utilizza un metodo diverso per fornire la funzionalità comune, non è possibile imporre che B.doSomething() chiama questo metodo comune.
Qualche idea su come devono essere implementati i metodi?
Vorrei aggiungere 'final' a' public public doSomething() '. Questo dovrebbe garantire che non possa essere sovrascritto da una sottoclasse (che potrebbe fare il Naive Coder (io in 2 mesi)). – RowlandB