Ho una classe astratta che dovrebbe implementare un campo pubblico, questo campo è un'interfaccia o un'altra classe astratta.Sovrascrivi campi classe Java astratti
qualcosa di simile:
public abstract class GenericContainer {
public GenericChild child;
}
public abstract class GenericChild {
public int prop1=1;
}
public abstract class SpecialChild extend GenericChild {
public int prop1=2;
}
Ora ho un altro contenitore classe specializzata:
public abstract class SpecialContainer extends GenericContainer {
public SpecialChild child=new SpecialChild(); //PAY ATTENTION HERE!
}
Java mi permettono di compilare questo, e immagino che il campo child
in SpecialContainer
sta sovraccaricando automaticamente il campo child
dello GenericContainer
... Le domande sono: Ho ragione su questo? Accadrà il "sovraccarico" automatico del bambino?
E, ancora più importante domanda, se ho un'altra classe in questo modo:
public class ExternalClass {
public GenericContainer container=new SpecialContainer();
public int test() {
return container.child.prop1
}
}
test()
torneranno 1 o 2? intendo il campo del contenitore GenericContainer
che cosa chiamerà prop1
, il generico o il speciale? E se il prop1 speciale fosse dichiarato come String (sì, java mi permette di compilare anche in questo caso)?
Grazie!
campi No. non vengono sovrascritte, solo metodi fanno. –
Quindi se in "SpecialChild" ho un metodo che usa prop1, cosa otterrà alla prima chiamata? 1 o 2? Ho provato e rimosso prop1 da SpecialChild mi permetterà di scrivere un metodo in SpecialChild che usa prop1 anche se questo è definito solo in GenericChild ... Quindi penso che un tipo di sovraccarico accade ... – Alex
potresti sempre provare _running it_ . –