Ad esempio, considera di avere una classe per altre classi da estendere:
public class LoginPage {
public String userId;
public String session;
public boolean checkSessionValid() {
}
}
e alcune sottoclassi:
public class HomePage extends LoginPage {
}
public class EditInfoPage extends LoginPage {
}
In effetti, la sottoclasse non ha alcun metodo per sovrascrivere, inoltre non accedo alla HomePage in modo generico, cioè: Non vorrei fare qualcosa del tipo:
for (int i = 0; i < loginPages.length; i++) {
loginPages[i].doSomething();
}
Voglio solo riutilizzare la pagina di accesso. Ma secondo il link , preferisco la composizione qui perché non ho bisogno dell'interfaccia LoginPage, quindi non uso l'ereditarietà qui :
public class HomePage {
public LoginPage loginPage;
}
public class EditInfoPage {
public LoginPage loginPage;
}
ma il problema arriva qui, nella nuova versione, il codice:
public LoginPage loginPage;
duplicati quando viene aggiunta una nuova classe. E se LoginPage ha bisogno di setter e getter, devono essere copiati più codici:
public LoginPage loginPage;
private LoginPage getLoginPage() {
return this.loginPage;
}
private void setLoginPage(LoginPage loginPage) {
this.loginPage = loginPage;
}
Quindi la mia domanda è, è "la composizione sull'ereditarietà" che viola il "principio secco"?