Abstrakte Klassen

Status
Nicht offen für weitere Antworten.

innoc

Aktives Mitglied
Vorab: Ich bin neu hier im Forum, und hoffe mein Anliegen ist kein alter Hut. Via Google habe ich keine Lösung für mein Problem gefunden:

Hier mein Problem:

Ich will die folgende Klasse:
Java:
class Kostenberechnung {
  public static double Mietkosten = 8.0;

  public static void main(String[] args) {

    Person[] person = new Person[2];

    personen[0] = new Hamburger("Hans");
    personen[1] = new Hamburger("Peter");

     for (Person person : personen) {
      System.out.println("Kosten " + person.toString() + ": " + person.berechneMonatlicheKosten());
    }
  }
}
wie folgt umschreiben:
Java:
class Kostenberechnung {

  public static void main(String[] args) {

    Person[] person = new Person[2];

    personen[0] = new Hamburger("Hans");
    personen[1] = new Hamburger("Peter");

    KostenModell kostenModell = new KostenModell(8.0);

     for (Person person : personen) {
      System.out.println("Kosten " + person.toString() + ": " + person.berechneMonatlicheKosten(kostenModell));
    }
  }
}
Dafür verwende ich die beiden folgenden Klassen:
Java:
abstract class Person {
  String Name;

  public Person (String Name) {
    this.Name = Name;
  }

  public abstract double berechneMonatlicheKosten();

}

class Hamburger extends Person {

  public Hamburger (String Name) {
    super(Name);
  }

  public String toString() {
    return Name;
  }


  public double berechneMonatlicheKosten() {
    return Kostenberechnung.Mietkosten;
  }
}
Ich habe nun alles mögliche versucht die Klasse KostenModell in den Programmcode zu implementieren und die beiden Klassen Person und Hamburger entsprechend so zu modifizieren, dass ich den Parameter Mietkosten mittels der Klasse KostenModell an die Klasse Kostenberechnung übergeben kann, habe dabei jedoch keine Lösung gefunden und bin nun mit meinem Latein am Ende. Hat jemand einen Tipp für mich?
 
Zuletzt bearbeitet von einem Moderator:

Schandro

Top Contributor
Du kannst im Konstruktor von Hamburger bzw. Person ein Object von "KostenModel" als Parameter erhalten und dieses dann als Membervariable "abspeichern". Dann kannst du es immer wieder in berechneMonatlicheKosten benutzen.

Oder du schreibst berechneMonatlicheKosten so um, das es ein Object von "KostenModel" als Parameter erwartet.
 
Zuletzt bearbeitet:

innoc

Aktives Mitglied
Ich habe nun in der Klasse Person folgende, fett markierte Programmzeilen ergänzt:
Java:
abstract class Person {
String Name;
KostenModell Mietkosten;

public Person (String Name) {
this.Name = Name;
this.Mietkosten = Mietkosten;
}

public abstract double berechneMonatlicheKosten();

}
Nun bekomme ich vom Kompiler den Fehler: ... berechneMonatlicheKosten() in Person cannot be applied to (KostenModell) ...

Die Klasse KostenModell sieht bei mir wie folgt aus:
Java:
class KostenModell {
  double Mietkosten;

  public KostenModell ( double Mietkosten) {
    this.Mietkosten = Mietkosten;
  }

  public double Mietkosten(){
    return Mietkosten;
  }
Ich habe noch so manches ausprobiert, es kamen aber nur weitere Kompilierfehler hinzu. Was übersehe ich da?
 
Zuletzt bearbeitet von einem Moderator:

Schandro

Top Contributor
Java:
public Person (String Name) {
this.Name = Name;
this.Mietkosten = Mietkosten;
}
Du musst auch "Mietkosten" als Parameter erwarten

übrigens: Variablen und Methodennamen schreibt man im camelCase (d.h. erster Buchstabe klein)
Klassen im CamelCase


wegen der Fehlermeldung: anscheinend rufst du noch irgendwo berechneMonatlicheKosten mit einem Parameter auf, obwohl berechneMonatlicheKosten ja keinen Parameter erwartet.
 

innoc

Aktives Mitglied
Erstmal vielen Dank für die schnelle Antwort.
Ich bin jetzt nur etwas verwirrt. Ich möchte ja der Methode berechneMonatlicheKosten Werte, die ich in Kostenmodell deklariert habe, übergeben. Die Übergabe soll in der Klasse Person passieren, da ich dann neben Hamburger noch Klassen für Kölner, Mainzer, etc. implementieren und für jede dieser Klassen separat eine Multiplikation mit dem in Mietkosten gespeicherten Zahlenwert durchführen kann. Also muss in der Klasse kostenberechnung die Methode berechneMonatlicheKosten mit dem oder den in der Klasse kostenModell abgelegten Werten (später - wenn es dann hoffentlich funktioniert - nicht nur Mietkosten, sondern auch Stromkosten, usw.) aufgerufen werden. Dass berechneMonatlicheKosten in Person und Hamburger parameterlos ist, liegt daran, dass ich dachte, das müsse in abstrakten Klassen so sein. Liege ich da falsch?
 

Schandro

Top Contributor
Dass berechneMonatlicheKosten in Person und Hamburger parameterlos ist, liegt daran, dass ich dachte, das müsse in abstrakten Klassen so sein.
Das ist falsch, wenn du in der abstrakten Klasse und in der implementierenden Klasse (in deinem Fall "Hamburger") die Parameterliste änderst, funktioniert es.

Mal ne Designfrage:
Warum stellst du den Wohnort einer Person als Klasse dar? Kann ein Hamburger was anderes machen als ein Mainzer? (=unterschiedliche Methoden?)

Normalerweise sind Klassen ansich nämlich nicht dazu da, um Informationen abzuspeichern
(so ala "Diese Person ist instanceof Hamburger, deswegen ist sie ein Hamburger)
Man würde das eher durch einen String oder ein enum repräsentieren, anstatt für jeden einzelnen Wohnort eine extra Klasse schreiben zu müssen.

Aber wie gesagt, falls diese "verschiedenen Arten von Personen" auch verschiedene Methoden oder auch nur verschiedene Methodenbodys (Stichwort Override) haben sollen, kann das ganze Sinn machen.
 

Landei

Top Contributor
Das ist falsch, wenn du in der abstrakten Klasse und in der implementierenden
Warum stellst du den Wohnort einer Person als Klasse dar? Kann ein Hamburger was anderes machen als ein Mainzer?

Der Hamburger s-tolpert über einen s-pit-sen S-tein, während der Mainzer darüber singt und lacht!!!
 

innoc

Aktives Mitglied
Also bevor hier ein Hamburger stolpert und ein Mainzer darüber lacht, nach längerem Herumprobieren habe ich das Demoprogramm zum Laufen bekommen. Es handelt sich wirklich nur um ein Demoprogramm zur Benutzung von abstrakten Klassen.
Hier nun der Code, wie er bei mir nun funktioniert, und noch zusätzlich erweitert um die Klasse Koelner:
Java:
class KostenModell {
double Mietkosten;

public KostenModell ( double Mietkosten) {
this.Mietkosten = Mietkosten;
}

public double Mietkosten(){
return Mietkosten;
}

abstract class Person {
String Name;

public Person (String Name) {
this.Name = Name;
}

public abstract double berechneMonatlicheKosten(KostenModell m);

}

class Hamburger extends Person {

public Hamburger (String Name) {
super(Name);
}

public String toString() {
return Name;
}


public double berechneMonatlicheKosten(KostenModell m) {
return m.Mietkosten();
}
}

class Koelner extends Person {

public Koelner (String Name) {
super(Name);
}

public String toString() {
return Name;
}


public double berechneMonatlicheKosten(KostenModell m) {
return 0.75 * m.Mietkosten();
}
}

 
class Kostenberechnung {

public static void main(String[] args) {

Person[] person = new Person[3];

personen[0] = new Hamburger("Hans");
personen[1] = new Hamburger("Peter");
personen[2] = new Koelner("Jupp");

KostenModell kostenModell = new KostenModell(8.0);

for (Person person : personen) {
System.out.println("Kosten " + person.toString() + ": " + person.berechneMonatlicheKosten(kostenModell));
}
}
}
Vielen Dank an Schandro. Der Hinweis, dass abstrakte Klassen auch Parameter haben können, hat mir sehr geholfen.
 
Zuletzt bearbeitet von einem Moderator:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
G Abstrakte Klassen Java Basics - Anfänger-Themen 11
J Objekte und Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Java Interface/abstrakte Klassen Java Basics - Anfänger-Themen 2
M Erste Schritte Prüfungsbeispiel: Interface / abstrakte Klassen Java Basics - Anfänger-Themen 8
D Abstrakte Klassen Verständniss Frage Java Basics - Anfänger-Themen 4
D Interface Interfaces und abstrakte Klassen implementieren Java Basics - Anfänger-Themen 4
B Abstrakte Klassen Java Basics - Anfänger-Themen 7
S Abstrakte Klassen Java Basics - Anfänger-Themen 2
C Dynamische Referenz & abstrakte Klassen Java Basics - Anfänger-Themen 3
V Interface Interfaces und abstrakte Klassen Java Basics - Anfänger-Themen 3
G Abstrakte Klassen - theoretische Frage Java Basics - Anfänger-Themen 2
OnDemand Abstrakte Klassen Java Basics - Anfänger-Themen 4
T OOP Abstrakte Klassen und ihre Kinder: wie läuft das? Java Basics - Anfänger-Themen 3
M Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Interfaces Abstrakte Klassen Java Basics - Anfänger-Themen 15
M Interface und Abstrakte Klassen Java Basics - Anfänger-Themen 12
R Namenskonvention abstrakte Klassen Java Basics - Anfänger-Themen 6
C OOP Objektstruktur: abstrakte Klassen Java Basics - Anfänger-Themen 3
T OOP abstrakte klassen - methoden Java Basics - Anfänger-Themen 8
M Abstrakte Klassen Java Basics - Anfänger-Themen 21
D Abstrakte Klassen und Interfaces als Paramter in Funktionen Java Basics - Anfänger-Themen 3
T Interfaces: Braucht man abstrakte Klassen eigentlich noch? Java Basics - Anfänger-Themen 3
T Abstrakte Klassen Java Basics - Anfänger-Themen 6
C abstrakte Klassen mögen mich nicht... Java Basics - Anfänger-Themen 2
D Zusammenfassung von Klassen (Vererbung? Abstrakte Klass? ...?) Java Basics - Anfänger-Themen 8
G Abstrakte Klassen und Methoden Java Basics - Anfänger-Themen 3
C Schnittstellen und Abstrakte Klassen Java Basics - Anfänger-Themen 3
I Abstrakte Klassen Java Basics - Anfänger-Themen 22
G Abstrakte Klassen ? Java Basics - Anfänger-Themen 9
nadoria abstrakte Klassen Java Basics - Anfänger-Themen 6
M Unterscheid Abstrakte Klassen/Interface Klassen? Java Basics - Anfänger-Themen 7
T abstrakte Klassen? Java Basics - Anfänger-Themen 2
M abstrakte klassen und interfaces Java Basics - Anfänger-Themen 2
M abstrakte klassen / Schnittstellen Java Basics - Anfänger-Themen 4
H abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 13
R Interfaces durch abstrakte Klassen ersetzbar? Java Basics - Anfänger-Themen 8
A Abstrakte Klassen und Interfaces Java Basics - Anfänger-Themen 11
S Vererbung Abstrakte Methoden: Wozu das Ganze?! Java Basics - Anfänger-Themen 7
S abstrakte methoden in subclass? Java Basics - Anfänger-Themen 7
E abstrakte Klasse implementiert ein Interface Java Basics - Anfänger-Themen 40
G Java Abstrakte Methoden Java Basics - Anfänger-Themen 2
T Abstrakte Klasse und Interfaces Java Basics - Anfänger-Themen 12
D Abstrakte Klasse, Konstruktorkette, Attribute setzen Java Basics - Anfänger-Themen 12
L Abstrakte Typen und Schnittstellen Java Basics - Anfänger-Themen 19
S Abstrakte Methode nutzen Java Basics - Anfänger-Themen 9
J abstrakte Methode in Klasse mit Rückgabetyp der abgeleiteten Klasse Java Basics - Anfänger-Themen 5
I Abstrakte Klasse - static Attribute deklarieren Java Basics - Anfänger-Themen 14
T Übungsaufgabe abstrakte Klasse Java Basics - Anfänger-Themen 21
A Interface Abstrakte Interface Methode kann nicht benutzt werden Java Basics - Anfänger-Themen 10
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Datentypen Abstrakte Datentypen Java Basics - Anfänger-Themen 0
kilopack15 Beziehung Interface - (abstrakte) Klasse -Unterklasse Java Basics - Anfänger-Themen 3
K Abstrakte Klasse: vererbte Klasse; instance of? Java Basics - Anfänger-Themen 26
A Abstrakte Datentypen - Methode delete Java Basics - Anfänger-Themen 6
N Vererbung Abstrakte Klasse stateful Java Basics - Anfänger-Themen 3
D Methoden Abstrakte Methoden Java Basics - Anfänger-Themen 3
W Abstrakte Klasse mit Variable? Java Basics - Anfänger-Themen 2
C Abstrakte und virtuelle Methoden in Java Java Basics - Anfänger-Themen 4
E verdeckte abstrakte Methode sinnvoll? Java Basics - Anfänger-Themen 7
A Vererbung Abstrakte Klasse mit Methode die Objekte der Subklassen benutzt? Java Basics - Anfänger-Themen 7
W Abstrakte und konkrete Klasse Java Basics - Anfänger-Themen 4
F Abstrakte Klasse doch zum "Teil" instanzieren? Java Basics - Anfänger-Themen 4
H Abstrakte Basisklasse Verständnisproblem! Java Basics - Anfänger-Themen 8
M Statische Methoden in Interface/Abstrakte Klasse Java Basics - Anfänger-Themen 6
N Datentypen abstrakte Klasse wird instanziert Java Basics - Anfänger-Themen 3
D Methoden abstrakte Methoden und Rückgabewerte Java Basics - Anfänger-Themen 2
B Abstrakte Methode vs. Interface Java Basics - Anfänger-Themen 2
propra Interface - abstrakte Klasse Java Basics - Anfänger-Themen 18
N Abstrakte Klasse Java Basics - Anfänger-Themen 28
L Über abstrakte Klasse auf eine Klasse zugreifen? Java Basics - Anfänger-Themen 6
V Vererbung Abstrakte Methode Java Basics - Anfänger-Themen 3
J Welchen Sinn haben abstrakte Methoden? Java Basics - Anfänger-Themen 4
D Wann genau abstrakte Klasse und wann ein Interface verwenden? Java Basics - Anfänger-Themen 4
StupidAttack Abstrakte Methoden in nicht-abstrakter Methode in abstrakter Klasse Java Basics - Anfänger-Themen 6
T Abstrakte Klasse Java Basics - Anfänger-Themen 3
S Abstrakte Klasse Java Basics - Anfänger-Themen 5
T OO, Konstruktor, abstrakte Methoden Java Basics - Anfänger-Themen 13
K Abstrakte Klasse vs. Interface Java Basics - Anfänger-Themen 21
K Abstrakte Klasse bilden? Java Basics - Anfänger-Themen 11
S Abstrakte Klasse, festlegen, dass Methode verändert werden muss. Java Basics - Anfänger-Themen 4
H Warum Java? | Abstrakte Klasse = Modul? Java Basics - Anfänger-Themen 20
J abstrakte klasse und methode super Java Basics - Anfänger-Themen 2
H Eine Abstrakte Klasse muss. Java Basics - Anfänger-Themen 7
G Abstrakte Klasse "Point" Java Basics - Anfänger-Themen 2
G Abstrakte Methode in gleicher Klasse aufrufen Java Basics - Anfänger-Themen 5
M abstrakte Klasse Java Basics - Anfänger-Themen 3
F Abstrakte Klasse: Konstruktor vs init() Java Basics - Anfänger-Themen 13
G Abstrakte Klasse (was passiert hier) Java Basics - Anfänger-Themen 3
G Interface oder Abstrakte Klasse? Java Basics - Anfänger-Themen 3
G konkretes beispiel: interface hier besser als abstrakte kl. Java Basics - Anfänger-Themen 4
Acha Unterschied Interface - abstrakte Klasse Java Basics - Anfänger-Themen 4
B OOP: abstrakte klasse implementiert interface Java Basics - Anfänger-Themen 3
L abstrakte Methode nicht implementiert! Java Basics - Anfänger-Themen 5
D Abstrakte Klasse Graphics Java Basics - Anfänger-Themen 3
A Abstrakte Klasse Java Basics - Anfänger-Themen 3
G abstrakte klasse Java Basics - Anfänger-Themen 6
F Abstrakte Klasse Baum Java Basics - Anfänger-Themen 6
A Eine abstrakte Methode static machen? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben