2017-11-10 29 views
-1

インベントリトラッククラス(Main)クラスのItemクラスからコードをテストしようとしていますが、オブジェクトを作成しようとするとエラーが発生します。これはItem()というプライベートメソッドのためだと思いますが、これを修正するにはどうすればいいですか?私はJavaの初心者ですので、シンプルにしてください、ありがとう! :)オブジェクトの作成中にエラーが発生しました

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

コンストラクタがプライベートなのはなぜですか? – Berger

+1

@ドリュー:とにかくデフォルトのコンストラクタが良いアイデアだと確信していますか?クラスにセッターとゲッタだけがないので、 'new Item()'を使ってItemオブジェクトを作成するときにItemに名前やその他のものを設定することは不可能です。おそらく、あなたはすべての値を設定できるように、あなたの別のコンストラクタを使うべきでしょう。 –

答えて

1
private Item() { 

    } 

メソッドが呼び出されたconstructor

public Item() { 

    } 
1

などの公共への変更を。これは、newキーワードを使用してオブジェクトを作成するときに呼び出されます。 privateキーワードはaccess modifierです。あなたのクラスには公共のコンストラクタpublic Item(String name, int quantity, double price, String upc)があり、例えばItem test = new Item("test", 0,0,"upc");を使って呼び出すことができます。

アクセス制御のドキュメントで分かるように、アクセス修飾子がプライベートである場合にのみ、クラス自体からメソッド/コンストラクタを呼び出すことができます。 あなたはそのコンストラクタをパブリックにすることができますが、クラス定義が与えられていればそれほど有用ではありません。設定されたメソッドを持たない4つのプライベートフィールドがあるので、Item()を公開するとインスタンスを作成できますが、フィールドを決して設定することはできません。一方、コンストラクタpublic Item(String name, int quantity, double price, String upc)にはコードが含まれていません。通常はこのようにそこフィールドを初期化します:

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

はその後、意味のあるアイテムのインスタンスを取得するために適切な値とそのコンストラクタを呼び出します。

関連する問題