2016-04-10 11 views
2

Ich habe ein kleines Problem mit Konstruktoren in meinem Programm getroffen. Es ist eine einfache Bankdatenbank, die Kundendaten speichert. Ich muss Methoden zur Einzahlung, Abhebung und Überweisung von Bargeld zwischen zwei Konten implementieren. Ich habe diese Art von Konstruktor implementiert neues Bankkonto hinzu:Java mit Standardkonstruktor

public Customer() { 
     Scanner scan = new Scanner(System.in); 
     System.out.println("Enter id of customer:"); 
     this.id = scan.nextLine(); 
     File folder = new File("CustomerDataBase" + File.separator + this.id + ".txt"); 
     if(folder.exists()) { 
      System.out.println("Customer ID already exists!"); 
      System.exit(1); 
     } 
     try {  
      System.out.println("Enter name of customer:"); 
      this.name = scan.nextLine(); 
      System.out.println("Enter surname of customer:"); 
      this.surname = scan.nextLine(); 
      System.out.println("Enter PESEL number of customer:"); 
      this.pesel = scan.nextLine();   
      System.out.println("Enter address of customer:"); 
      System.out.println(" Street:"); 
      this.adressStreet = scan.nextLine(); 
      System.out.println(" City:"); 
      this.adressCity = scan.nextLine(); 
      System.out.println(" Zip Code: "); 
      this.zipCode = scan.nextLine(); 
      System.out.println("Enter funds of Customer:"); 
      this.funds = Double.parseDouble(scan.nextLine()); 
      this.saveCustomer(); 
      scan.close(); 
     }catch(NumberFormatException e) { 
      System.out.println("Error : " + e); 
      System.exit(1); 
     } 
    } 

Und dann habe ich eine Methode withdraw:

static void withdraw (int amount, int id) { 

    File f = new File("CustomerDataBase" + File.separator + String.valueOf(id) + ".txt"); 
    Scanner fRead; 

    Customer tempCustomer = new Customer(); 

    try{ 
     fRead = new Scanner(f); 
     tempCustomer.id = fRead.nextLine(); 
     tempCustomer.name = fRead.nextLine(); 
     tempCustomer.surname = fRead.nextLine(); 
     tempCustomer.pesel = fRead.nextLine(); 
     tempCustomer.adressStreet = fRead.nextLine(); 
     tempCustomer.adressCity = fRead.nextLine(); 
     tempCustomer.zipCode = fRead.nextLine(); 
     tempCustomer.funds = Double.parseDouble(fRead.nextLine()) - id; 
     fRead.close(); 
     tempCustomer.saveCustomer(); 
    }catch(FileNotFoundException e) { 
     System.out.println("File not found!"); 
     System.exit(1); 
    } 
} 

Die withdraw Methode liest Daten aus der Datei und habe in den Läden es in der Klasse. Also erstelle ich ein Objekt als Kundentyp. Aber ich möchte nur "einfache" (Standard) -Konstruktoren verwenden, die Java bietet, wenn Sie nicht Ihre eigenen deklarieren. Wie geht das? Ich lese über super(): Anweisung, aber wenn ich es richtig verstanden habe, funktioniert es nur, wenn Sie von einer anderen Klasse erben.

+1

Ihre 'customer' Klasse so die Standard-Ebene wird nicht erstellt ... –

+0

Der Konstruktor, den er deklarierte, ist der Standardkonstruktor, da er ihn als No-Args-Konstruktor deklarierte – pczeus

+0

Deshalb gibt es kein "einfaches" (das Wort 'default' ist hier ein wenig irreführend) –

Antwort

0

Jede Klasse enthält einen Standardkonstruktor, der in der Klasse selbst nicht sichtbar ist. Beachten Sie jedoch, dass der Standardkonstruktor nicht verwendet werden kann, wenn Sie einen anderen Konstruktor als den Standardkonstruktor angeben (siehe @Rustam-Kommentar unten). Zum Beispiel, sagen wir mal Ihre Customer-Klasse sieht wie folgt aus:

public class Customer { 

    private String name; 

    private String lastName; 

    private age int; 

    private String ssn; 

    //default constructor that is NOT visible 
    Customer() 
    { 

    } 

    //other constructor given name and lastName 
    Customer(name, lastName) 
    { 
     this.name = name; 

     this.lastName = lastName; 
    } 

    //getters and setters 

} 

Der Konstruktor Kunde() wird standardmäßig erstellt und es ist nicht notwendig, dass Sie in Ihrer Klasse gehören.

Sie können dann eine Kunden Instanz mit dem Standard-Konstruktor erstellen und dann würden Sie brauchen Setter zu verwenden, um die Eigenschaften einzustellen, wie folgt:

, einen Konstruktor der eigenen definierten
public class Test { 

    public static void main(String [] args){ 

     Customer c = new Customer(); 

     //setting parameters 
     c.setName("Jose"); 

     c.setLastName("Mejia"); 

    } 

} 
+0

Standardkonstruktor ohne vom Compiler implizit hinzugefügte Parameter IF NO OTHER CONSTRUCTOR für die Klasse angegeben. Wenn die Klasse nur einen Konstruktor Customer (String name, String lastName) hat, können Sie keine Instanz mit dem neuen Customer() erstellen. – Rustam

+0

Korrekt. Ich habe vergessen, das zur Antwort hinzuzufügen. Ich werde jetzt hinzufügen. Du musstest mich nicht -1 – Erick

Verwandte Themen