public class Base {
//long list of attributes
// no Constructor using fields
// no init methode
// i cannot change this class
}
jetzt erweitert i die Basisklasse wie:java, initialisieren SubClass von Oberklasse
public class subClass extends Base{
private boolean selected;
...
getter und setter
...
}
i werden eine Liste von Basisobjekt List<Base>
, aber ich brauche die gleiche Liste, sondern als List<SubClass>
ist Gibt es eine Möglichkeit, die Unterklasse von der Basisklasse zu initialisieren?
Beispiel:
for(Base b: list){
SubClass sub = (SubClass)b; // Thats wrong i know
if(...){
sub.setSelected(true);
}
newList.add(sub);
}
ich versuche, das Handbuch init jedes Attribut des Basis Class
zum SubClass
ich meine Frage zu aktualisieren, um zu vermeiden, wie in den Anmerkungen angefordert: der Entwurf oben ist nur ein Beispiel. Mein QUESTIN GENAU IST:
Warum ist die Konvertierung von BaseClass in SubClass (sence Subclass extends BaseClass
) nicht möglich? warum Java dosn't erlauben Sie mir folgendes zu tun:
Beispiel:
Class Base{
private String name;
.....
}
Class SubClass extends Base{
private String title;
}
dann
Base b = DBController.getById(...);
SubClass sub = (SubClass)b;
nach, dass das Objekt sub
sollte den Attributnamen aus dem Objekt b
haben und die title
Attribut ist null
Warum ist das in Java nicht der Fall?
sorry für mein schlechtes Englisch, dank
Initialize Unterklasse von Superklasse - warum? Das hört sich im besten Fall schlecht und im schlimmsten Fall gefährlich an. –
Wo ist das Feld "List " definiert? In der Base-Klasse selbst? Haben Sie die Kontrolle darüber, wo und wie es initialisiert wurde? –
Perception
Ich schlage vor, Sie schauen in "bevorzugen Zusammensetzung über die Vererbung" - google es. Sie werden einige interessante Diskussionen zu diesem Thema finden. Ich sage das nur, weil es so aussieht, als ob Sie verzweifelt versuchen, das Privileg zu missbrauchen. –