Java Konstruktor Problem

Chillosoph

Ensign
Registriert
Juli 2010
Beiträge
139
Hi @all,

beim implementieren einer Unterklasse scheiter ich schon beim Konstruktor. Die Klasse OpenCounter (vorgegeben) soll durch eine Unterklasse MemCounter erweitert werden.

Konstruktor der Klasse OpenCounter:

Code:
OpenCounter(String name) {
       this.name = name;
}

Konstruktor der Unterklasse MemCounter:

Code:
public class MemCounter extends OpenCounter
{
    OpenCounter oc;
    
    public MemCounter(String name)
    {
       oc = new OpenCounter(name);
    }
}

Der Compiler wirft den Fehler "cannot find symbol - constructor OpenCounter()". Ich habe absolut keine Ahnung weshalb das nicht funktioniert. In einer ähnlichen Aufgabe hat genau das einwandfrei funktioniert. Programmiert wird mit BlueJ.

Für Anregungen bin ich sehr dankbar!
 
hey schon mal was von super gehört?

vll hilft das dir weiter!

sprich statt: oc = new OpenCounter(name);

einfach super(name);
 
public MemCounter(String name)
{
super(name);
oc = new OpenCounter(name);
}

so muss dat sein ...
 
Code:
public class MemCounter extends OpenCounter
{
    OpenCounter oc;
    
    public MemCounter(String name)
    {
       oc = new OpenCounter(name);
    }
}

Unabhängig davon, dass der Compiler meckert:

Warum legst du eine Objektvariable oc an?

Wenn du Dich mit "extends" von OpenCounter ableitest, dann sind alle deine Memcounter-Objekte auch OpenCounter-Objekte und erben somit alle Eigenschaften/Methode davon. Es ist daher nicht notwendig oc anzulegen.

Das was du mit oc machst sieht eher nach "Delegation" aus, dabei braucht man allerdings dann das "extends OpenCounter" nicht. Bei der Delegation wird die "Super"klasse in eine neue Klasse eingebettet (wie du es mit oc machst).

Ich schätze mal, dass du echt vererben sollst und nicht sowas wie Delegation verwenden darfst.
 
Erstmal vielen Dank für die schnelle Antwort! Klappt soweit auch, nur stellt sich nun das nächste Problem (das selbe Problem?):

Code:
private final String name;	   // Name des Zaehlers
protected int count;		   // Zaehlerstand

In der Klasse OpenCounter ist der String "name" private gesetzt. Entsprechend sieht die Fehlermeldung aus: "name has private access in OpenCounter"
Gibt es eine Möglichkeit den Konstruktor so zu verwenden, dass "name" nicht public sein muss?

Vielen Dank für die Beantwortung dieser n00b-Fragen :)


EDIT:
Klappt nun, "super(name)" passt. Hatte mich in der Aufregung noch vertippt -.-
Vielen Dank für die kompetente Hilfe!
 
Zuletzt bearbeitet: (Epic Fail)
Zurück
Oben