PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [java] Vererbung



TrollSlayer
26-02-2004, 10:00
Hallo!
Meine Klasse soll von einer Klasse erben, die aber nur einen private-Konstruktor hat (dieser ist aber in der Kind-Klasse nicht sichtbar!). Geht das in Java?
Danke!

Lin728
26-02-2004, 10:51
Nein, sowas geht (meines Wissens) nicht :(

TrollSlayer
26-02-2004, 11:23
Danke für die Antwort!

Sym
26-02-2004, 12:54
Original geschrieben von TrollSlayer
Hallo!
Meine Klasse soll von einer Klasse erben, die aber nur einen private-Konstruktor hat (dieser ist aber in der Kind-Klasse nicht sichtbar!). Geht das in Java?
Danke!

Bist Du sicher, dass es sich um einen privaten Konstruktor handelt? Man lernt ja bekanntlich nie aus, aber einen private constructor kann ich mir nicht vorstellen. Wie soll denn ein Element der Klasse initialisiert werden, wenn der Konstruktor nur innerhalb der Klasse aufgerufen werden kann?

Meist hat es aber einen Sinn, warum manche Methoden in der KindKlasse nicht sichtbar sind(bzw. einfach nicht mehr existieren). Wenn z.B. eine überschreibbare Methode diese Methode nutzt, braucht sie in der abgeleiteten Klasse nicht bekannt zu sein (da sie ja normalerweise nicht genutzt werden soll)

rarup
26-02-2004, 15:11
Die Klasse hat ausschlieslich private Konstruktoren? Dann geht's nicht.
Wenn die Konstruktoren nur protected sind ist's kein Problem, ebenso, wenn die Klasse wenigstens einen nicht-privaten Konstruktor hat.
Beispiel:
public class a {
private a(){}
public a(String s){..}
}
public class b extends a{
public b(){
super("bla");
}
}

@Sym
Das macht u.A. bei Enum-Klassen Sinn. Hier werden vordefinierte static public Instancen von der Klasse selber zur Verfügung gestellt.
Auch beim Factory-Pattern ist das mitunter Pflicht. Hier gibt's dann irgendwo eine Methode die eine Instanz der Klass zurückliefert.

Gruß
Rainer

fs111
26-02-2004, 15:46
Original geschrieben von Sym
Bist Du sicher, dass es sich um einen privaten Konstruktor handelt? Man lernt ja bekanntlich nie aus, aber einen private constructor kann ich mir nicht vorstellen. Wie soll denn ein Element der Klasse initialisiert werden, wenn der Konstruktor nur innerhalb der Klasse aufgerufen werden kann?

Meist hat es aber einen Sinn, warum manche Methoden in der KindKlasse nicht sichtbar sind(bzw. einfach nicht mehr existieren). Wenn z.B. eine überschreibbare Methode diese Methode nutzt, braucht sie in der abgeleiteten Klasse nicht bekannt zu sein (da sie ja normalerweise nicht genutzt werden soll)

Natürlich machen private Konstruktoren auch Sinn, z.B. beim Singleton-Pattern, wobei da aber meist ein protected und kein private bentutz wird.

fs111

TrollSlayer
27-02-2004, 17:18
Bist Du sicher, dass es sich um einen privaten Konstruktor handelt?
Ja. Es gibt nur einen Konstruktor und der ist private!

Wie soll denn ein Element der Klasse initialisiert werden, wenn der Konstruktor nur innerhalb der Klasse aufgerufen werden kann?
Dafür hat die Klasse eine getInstance()-Methode die eine Instanz dieser Klasse leifert.

sixfriends
28-02-2004, 14:25
Und warum legst du dann dein Klassenobjekt nicht über die getInstance() Methode an? Wäre das nicht am naheliegensten?

sixfriends