2017-09-05 1 views
-1

Okay, ich weiß, dass der Titel klingt wie ein Duplikat, aber ich versichere Ihnen, ich habe versucht, ähnliche Fragen zu finden, aber keine scheint ganz zu passen. Wenn Sie es finden, dies ablehnen und es verlinken können, werde ich es gerne entfernen.Aufruf und Verknüpfung einer Kind- und Elternklasse in Java

Das Ziel ist ein einfaches: Ich möchte ein 'Bankkonto' Programm erstellen, das die Eingabe des Benutzers, wie die Bank-A/C-Nummer, Saldo und Typ, identifiziert die Art des Kontos basierend auf das und gibt es für den Benutzer zu sehen.

ich drei Klassen erstellt haben, wie unten (nur drei der Einfachheit halber) gezeigt

1) der übergeordneten Klasse ‚Ein beliebiges Konto keine Art‘

public class ParentAccount { 
    private String acctNumber; 
    private double balance; 

    public ParentAccount(String acctNumber, double balance){ 
     this.acctNumber = acctNumber; 
     this.balance = balance; 

    } 

    public ParentAccount(){ 
     this.acctNumber = "0"; 
     this.balance = 0; 

    } 


    public String toString(){ 
     return String.format("A/C no:%s, Balance=%.2f", acctNumber, balance); 
    } 
} 

2) Das Kind Klasse 'Rechnung eines Checking Typ'

public class CheckingAccount extends ParentAccount { 
    private int limit = 10000; 
    @Override 
    public String toString(){ 
     return "Bank [" + super.toString() + ",limit=" + limit + "]"; 

    } 
} 

3) der Haupt Ausführung Klasse

import java.util.Scanner; 



public class Main { 
    public static void main(String[] args){ 
     String BankAC; 
     Double BankBalance; 
     String type; 


     Scanner scan = new Scanner(System.in); 
     System.out.println("Enter your Bank Account Number: "); 
     BankAC = scan.next(); 
     System.out.printf("Now Enter the balance: "); 
     BankBalance = scan.nextDouble(); 
     System.out.println("Now enter the type of bank account: "); 
     type = scan.next(); 


     ParentAccount P1 = new ParentAccount(BankAC, BankBalance); 

      if("Checking".equals(type)){ 


       ParentAccount P1 = new CheckingAccount(); 

       System.out.println(P1); 

      } 

    } 
} 

Zum Beispiel:

I-Eingang Bank A/c als 11234, Balance als 100, Typ wie Checking

Ausgang: Bank A/C: 0 Stand: 0 Grenze = 10000

Von Was ich sagen kann, scheint der Code den DEFAULT-Konstruktor in meiner Elternklasse anstelle des Benutzerkonstruktors zu nehmen, was ich verstehen kann.

Was ich nicht bekommen kann ist, wie man das umgehen kann. Irgendwelche Vorschläge?

+0

Sie einen 'ParentAccount' mit den vom Benutzer angegebenen Variablen zu erstellen, dann, wenn es sich um ein Girokonto ist man es wegwerfen (na ja, Sie ignorieren) und eine neue leere' CheckingAccount' schaffen, die Sie dann anzeigen. – Kayaman

Antwort

1

Ich bin fast versucht, dies ein Tippfehler zu nennen, aber Ihr Code macht genau, was Sie ihm gesagt haben, zu tun.

Erinnern Sie sich, dass Ihr ParentAccount Konstruktor überlastet ist. Es akzeptiert oder akzeptiert keine Parameter. Wenn es Parameter hat, wird der Wert nach Bedarf angegeben. Wenn nicht, wird es nicht stören.

Dies gilt auch für Ihre Kindklasse; Es ist implizit Aufruf super() wenn es instanziiert wird, so erhalten Sie ParentAccount 's-Arg-Konstruktor stattdessen aufgerufen.

Ein paar Dinge, die Sie, diese Arbeit zu tun machen bräuchten:

  • einen Konstruktor CheckingAccount hinzufügen, die einfach den übergeordneten Konstruktor aufruft.

    public CheckingAccount(String acctNumber, double balance) { 
        super(acctNumber, balance); 
    } 
    
  • Richtig instantiate eine Instanz von CheckingAccount je nach Typ.

    ParentAccount account; 
    if("Checking".equals(type)) { 
        account = new CheckingAccount(BankAC, BankBalance); 
    } else { 
        account = new ParentAccount(BankAC, BankBalance); 
    } 
    
    System.out.println(account); 
    
+0

funktionierte perfekt. Danke allen für die Hilfe! – Mack

0

Sie haben nur einen Konstruktor für die übergeordnete Klasse. Wenn Sie die Informationen erneut speichern möchten, wenn Sie P1 als neues checkingAccount-Objekt erstellen, müssen Sie auch einen Konstruktor für checkingAccount erstellen.

Sie erstellen eine neue Instanz für P1, für die keine Werte übergeben werden. Daher gehen die alten Werte verloren.

Ich empfehle so etwas wie dieses

public CheckingAccount(String acctnumber, double balance){ 
    super(acctnumber, balance); 
} 

und die Schaffung von P1 wie

ParentAccount P1 = new CheckingAccount(BancAC, BankBalance); 
0

Das Kind Klasse CheckingAccount nur haben: "default Konstruktor"

Und der Code:

ParentAccount P1 = new CheckingAccount(); 
System.out.println(P1); 

Keine Daten enthalten.

Verwandte Themen