Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Java Programmieren

Empfohlene Antworten

Veröffentlicht

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;

}

}

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ß

Schau bitte noch mal an in der Klasse Tasche .

public Tasche(double grosse){

this.grosse=grosse;

}

redest du nicht über diese Methode?

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ß

Danke erstmal .

Bis später .

Grüß

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

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.