Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo,

ich versuche gerade ein Programm zu schreiben aber bin noch ein Anfanger.

Thema=Erben

Kann man bitte mir sagen was bei dem Kopierkonstructor der erbende Klasse (Sache) falsch ist ?

Hier ist das Programm:

package Test;

public class Tasche {

private double grosse;

public Tasche(double grosse){

this.grosse=grosse;

}

public Tasche(Tasche t){ //Kopierconstructor

this.grosse=t.grosse;

}

public double Valeur(){

return grosse * 5;

}

}

package Testi;

import Test.Tasche;

public class Sache extends Tasche {

private double buch;

private double heft;

private Tasche t;

public Sache(Tasche t , double buch , double heft){

super(t);

this.t=t;

this.buch=buch;

this.heft=heft;

}

public Sache(Sache u ){ //Kopierkonstructor der Klasse Sache =>FEHLERMELDUNG

this.t=new Tasche(u.t);

this.buch=u.buch;

this.heft=u.heft;

}

}

Geschrieben

Deiner Klasse Tasche fehlt der Standard-Constructor:


public Tasche() {

    // hier etwas Code

}
Die nicht genannte Fehlermeldung weisst im übrigen auf das Fehlen dessen hin:

cannot find symbol

symbol  : constructor Tasche()

location: class Test.Tasche

Aller Anfang ist schwer, viel Erfolg!

Gruß

Geschrieben

Nein ich rede nicht über diese Methode, ich meinte nur, dass in deiner Klasse Tasche kein Standard-Constructor, also ein Constructor ohne Parameter, zu finden ist. Fügst du ihn deiner Klasse hinzu, funktionierts mit dem kompilieren.

Das hier anzutreffende Verhalten hat folgende Ursache: Der hier gezeigte Copy-Contructor ruft keinen Constructor der Klasse Tasche auf. Wird kein Constructor angegeben, so wird die Java Virtual Machine versuchen, den Standard-Constructor aufzurufen. Da deine Klasse Tasche keinen Standard-Constructor implementiert, beendet sich der Compiler mit o.g. Fehlermeldung.

Möchtest du keinen Standard-Constructor verwenden, müsstest du den Copy-Constructor Sache#Sache(Sache u) folgendermaßen implementieren:


public Sache(Sache u ) {

        super(u.t);

        this.t=new Tasche(u.t);

        this.buch=u.buch;

        this.heft=u.heft;

}

Im übrigen, warum hast du ein Objekt vom Typ Tasche in deiner Klasse Sache, wo doch Sache von Tasche abgeleitet ist?

Nochwas: Benutze doch bitte das CODE Tag (Editor -> Raute-Zeichen), dann ist dein Code besser lesbar.

Hoffe, das hilft dir weiter, Gruß

Geschrieben

Servus,

solltest Du den parameterlosen Konstruktor in Tasche und Sache nicht brauchen, dann kannst Du natürlich auch im Kopierkonstruktor von Sache einen Super- oder This-Konstruktor aufrufen, z.B.


public Sache(Sache u ){ 

		this(u.t, u.buch, u.heft);

}

Dann sparst Du Dir auch gleich die doppelten Zuweisungen von buch und heft.

Allerdings finde ich Deine Benamung ein wenig unglüclich. Eine Sache "ist eine" Tasche in Deinem Modell. Hier erwarte ich allerdings eigentlich eine Spezialisierung, z.B. eine Handtasche "ist eine" Tasche. Das ist eine korrekte Vererbung. Semantisch macht in meinen Augen eher der umgekehrte Fall Sinn. Eine Tasche "ist eine" Sache. Aber das ist schon OOAD. :)

Schöne Grüße,

Peter

Geschrieben

erm...

Etwas unlogisch.

Sache erbt von Tasche und besitzt eine Tasche.

Wenn eine Sache in Tasche ist, dann ist das für mich Komposition (evtl. auch Aggregation) aber nie Generalisierung.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...