Anfängerfrage zu Methoden in Vererbte Klassen

Rudilein

Mitglied
Guten Tag, ich lerne zurzeit im Selbststudium Java.

Jedoch bin ich beim lernen auf einen Problem gestoßen. Es ist rein ein logisches Problem, wofür ich keine eindeutige Lösung mir einfallen konnte und auch nicht gefunden habe. Es geht schlicht um eine leicht abgeänderte Form einer Methode einer vererbten Klasse.

Es soll folgendes machen:
Es geht um Konten und Unterkonten (Girokonten). Und man soll sowohl einzahlen, allerdings in dem Fall auszahlen.
Durch die Methode "Auszahlen" und nach eingeben des Betrag soll der Limit geprüft werden, ob der gewünschte Betrag zum auszahlen das Limit übersteigt. Wenn nicht, soll der Betrag vom Girokonto abgebucht werden. Wenn nicht, soll eine Fehlermeldung angezeigt werden.

Bevor ich zur eigentliche Frage komme, zeige ich euch einfach mal meinen Code:

main:
Java:
public class main {

    public static void main(String[] args) {

        double kS = 1500;
        String kN = "0000000003";
        double kL = 50;
        
        Girokonto gk = new Girokonto(kS, kN, kL);

        eingabe = JOptionPane.showInputDialog("Geben Sie Ihren gewünschten Betrag zum abheben ein.");
        betrag = Double.parseDouble(eingabe);
        gk.auszahlen(betrag);

Basisklasse "Konto":
Java:
public class Konto {
    
    protected double kontoStand;
    protected String kontoNummer;

    Konto (double kS, String kN)
    {
        kontoStand = kS;
        kontoNummer = kN;
    }

    void auszahlen(double betrag)
    {        
        kontoStand -= betrag;
    }

Vererbte Klasse "Girokonto":

Java:
(...)

public class Girokonto extends Konto {
    
    double limit = 0; 
    
    Girokonto () 
    {
        limit = 500;        
    }
    
    Girokonto(double kS, String kN, double kL)
    {
        kontoStand = kS;
        kontoNummer = kN;
        limit = kL;
    }

    void auszahlen(double betrag)
    {
        if(betrag>=limit){
            System.out.println("Auszahlung nicht möglich. Ursache: Betrag überschreitet limit.");
        } else {
            kontoStand -= betrag;
        }
    }

Mein Problem, was mich nun am meisten beschäftigt, ist jedoch die Methode "auszahlen" von der Unterklasse "Girokonto". Meine Bedenken sind, dass so eine Methode bereits in der "Basisklasse" Konto existiert. Allerdings zum prüfen des Limits, musste ich eine neue Methode erstellen in der Unterklasse Girokonto, da es nicht anders geht. Meine einzige Frage ist: Habe ich es richtig gemacht? Gibt es dazu auch elegantere Lösungswege? Wie würdet ihr das machen? Ich denke nämlich, dass das, was ich gemacht habe, alles andere als "richtig" oder zumindest "elegant" ist.

mfg 🙂
 
Zuletzt bearbeitet:
Wenn keine anderen semantischen oder syntaktischen Fehler enthalten sind, und mir sind keine aufgefallen, so müsste dieser Code zumindest das tun, was er soll.
Du kannst auf verdeckte Methoden und Variablen (verdeckt bedeutet in der Superklasse und der Subklasse enthalten. Die Implementierung in der Subklasse ist "stärker", weshalb diese die Implementierung der Superklasse verdeckt) mit super. zugreifen.
Deshalb ist hier
Java:
void auszahlen(double betrag){
   if(betrag>=limit){
      System.out.println("Auszahlung nicht möglich. Ursache: Betrag überschreitet limit.");
   } else {
      super.auszahlen(betrag);
   }
}
angebrachter. Dieser Code ist aber nur eine einfache Verdeutlichung der zugrunde liegenden Mechanismen.


PS: Klassen können zwar vererbt werden aber das ist etwas anderes. Du meinst die erweiternde oder die erbende Klasse und nicht die vererbte Klasse 😉

PPS: Warum darf man nicht genau das Limit abheben? Wenn ich 1000€ auf meinem Konto habe, dann möchte ich auch 1000€ abheben können und nicht immer einen Cent drauf lassen müssen.
 
Zuletzt bearbeitet:
Wenn keine anderen semantischen oder syntaktischen Fehler enthalten sind, und mir sind keine aufgefallen, so müsste dieser Code zumindest das tun, was er soll.
Du kannst auf verdeckte Methoden und Variablen (verdeckt bedeutet in der Superklasse und der Subklasse enthalten. Die Implementierung in der Subklasse ist "stärker", weshalb diese die Implementierung der Superklasse verdeckt) mit super. zugreifen.
Deshalb ist hier
Java:
void auszahlen(double betrag){
   if(betrag>=limit){
      System.out.println("Auszahlung nicht möglich. Ursache: Betrag überschreitet limit.");
   } else {
      super.auszahlen(betrag);
   }
}
angebrachter. Dieser Code ist aber nur eine einfache Verdeutlichung der zugrunde liegenden Mechanismen.

Gut, vielen dank für diese nützliche Information. 🙂

PPS: Warum darf man nicht genau das Limit abheben? Wenn ich 1000€ auf meinem Konto habe, dann möchte ich auch 1000€ abheben können und nicht immer einen Cent drauf lassen müssen.

Ist ja gut, ich werde das abändern. ;P

mfg
 
Zuletzt bearbeitet:

Zurück
Oben