2017-11-10 2 views
-1

Also ich versuche, meinen Code von der Klasse Item aus der InventoryTrackerInterface (main) -Klasse zu testen, aber wenn ich versuche, das Objekt zu erstellen, erstellt es einen Fehler. Ich denke, das liegt an der privaten Methode namens Item(), wie würde ich das beheben? Ich bin neu in Java, also bitte behalte es einfach, danke! :)Fehler beim Erstellen des Objekts Versuchen Code zu testen

public class InventoryTrackerInterface { 

    public static void main(String args[]) { 

     Item test = new Item(); // error here 

     test.getName(); 

    } 

} 

.

public class Item { 

    private String name; 
    private int quantity; 
    private double price; 
    private String upc; 


    private Item() { 

    } 

    public Item(String name, int quantity, double price, String upc) { 

    } 

    public String getName() { 
    return name; 
    } 

    public int getQuantity() { 
     return quantity; 
    } 

    public double getPrice() { 
     return price; 
    } 

    public String getUPC() { 
     return upc; 
    } 
} 
+2

Warum ist Ihr Konstruktor 'privat'? – Berger

+1

@Drew: Sind Sie sicher, dass der Standardkonstruktor sowieso eine gute Idee ist? Da Sie in Ihrer Klasse keine Setter und nur Getter haben, ist es unmöglich, einen Namen oder etwas anderes auf einem Item zu setzen, wenn Sie 'new Item()' verwenden, um das Item-Objekt zu erstellen. Vielleicht sollten Sie lieber Ihren anderen Konstruktor verwenden, mit dem Sie alle Werte festlegen können. –

Antwort

1
private Item() { 

    } 

ändern sie öffentlich als

public Item() { 

    } 
1

Diese Methode wird die constructor genannt. Es wird aufgerufen, wenn Sie ein Objekt über das Schlüsselwort new erstellen. Das Schlüsselwort private ist ein access modifier. In Ihrer Klasse haben Sie einen öffentlichen Konstruktor , der zum Beispiel unter Verwendung von Item test = new Item("test", 0,0,"upc"); aufgerufen werden kann.

Wie Sie in der Zugriffssteuerungsdokumentation sehen können, können Sie eine Methode/einen Konstruktor nur innerhalb einer Klasse selbst aufrufen, wenn der Zugriffsmodifizierer privat ist. Sie könnten diesen Konstruktor öffentlich machen, aber in Anbetracht Ihrer Klassendefinition ist das nicht sehr nützlich. Sie haben 4 private Felder ohne festgelegte Methoden. Wenn Sie also Item() public machen würden, könnten Sie eine Instanz erstellen, aber Sie könnten niemals ihre Felder festlegen. Auf der anderen Seite enthält der Konstruktor keinen Code. Normalerweise würden Sie die Felder dort wie folgt initialisieren:

public Item(String name, int quantity, double price, String upc) { 
    this.name = name; 
    this.quantity = quantity; 
    this.price = price; 
    this.upc = upc; 
} 

Man würde diese Konstruktor mit den entsprechenden Werten aufrufen, um eine sinnvolle Artikel Instanz zu erhalten.

Verwandte Themen