public class Base {
//long list of attributes
// no Constructor using fields
// no init methode
// i cannot change this class
}
teraz rozszerzony klasy bazowej, takich jak:java, zainicjować podklasy z nadklasy
public class subClass extends Base{
private boolean selected;
...
getter und setter
...
}
staję się lista obiektów bazy List<Base>
ale potrzebuję tej samej listy, ale jak List<SubClass>
jest istnieje sposób na zainicjowanie podklasy z klasy bazowej?
przykład:
for(Base b: list){
SubClass sub = (SubClass)b; // Thats wrong i know
if(...){
sub.setSelected(true);
}
newList.add(sub);
}
próbuję uniknąć ręcznego init każdego atrybutu Bazie Class
do podklasy
zaktualizować moje pytanie jako wymagane w Komentarze: Design powyżej to tylko przykład. moja QUESTIN DOKŁADNIE JEST:
dlaczego przekształcenie BaseClass w SubClass (se Subclass extends BaseClass
) nie jest możliwe? dlaczego Java dosn't pozwoli mi wykonać następujące czynności:
przykład:
Class Base{
private String name;
.....
}
Class SubClass extends Base{
private String title;
}
następnie
Base b = DBController.getById(...);
SubClass sub = (SubClass)b;
po tym Object sub
powinien mieć nazwę atrybutu z obiektu b
a Atrybut jest zerowy
Dlaczego tak nie jest w przypadku java?
Przepraszam za mój zły język angielski, dzięki
Inicjowanie podklasy z nadklasy - dlaczego? Brzmi to źle, w najlepszym wypadku, aw najgorszym - niebezpieczne. –
Gdzie jest zdefiniowane pole 'Lista '? W samej klasie 'Base'? Czy masz kontrolę nad tym, gdzie została zadeklarowana i jak została zainicjowana? –
Perception
Wysoce sugeruję, aby zagłębić się w "preferowanie kompozycji przez dziedziczenie" - google to. Znajdziesz tu interesujące dyskusje na ten temat. Mówię to tylko dlatego, że wygląda na to, że próbujesz rozpaczliwie nadużyć tego przywileju. –