2016-07-17 2 views
1

私はFoodItemを作っていると言いますが、新しい項目を入力したいので、項目の名前を変更できないようにしたいのですが、価格も変わりません(Setterを使用して変更することはできません)。私は数量を変更することができます。入力(int、Stringなど)を同じ種類の最終変数に変換するにはどうすればよいですか?

私の質問は以下の通りです。コンストラクタでNAMEとCOSTの決勝戦を宣言することで、getName()やgetCost()などのメソッドのように、その側にアクセスできなくなります。 質問だけでなく、私が返信する場合は、私の質問が十分に明確であることを願っています。

私はまだJavaの初心者ですので、私が何か明白なものを見逃している場合は私を許して、私は学ぶためにここにいる!

public class FoodItem { 

    private int _quantity; 

    public FoodItem (String name, int cost, int quantity){ // 
     final String NAME = name; 
     final int COST = cost; 
     _quantity = quantity; 
    } 

    public String getName(){ return NAME;} //<-- obviously cannot be found 
    public int getCost(){ return _cost;} 
    public int getNumber(){ return NUMBER;} 
    public void setCost(int newCost){ _cost = newCost;} 

答えて

3

NAMEとCOSTが間違った場所に宣言されています。 _quantityが宣言されている場所で宣言を移動します。

private int _quantity; 
private final String NAME; 
private final int COST; 

public FoodItem (String name, int cost, int quantity){ 
    NAME = name; 
    COST = cost; 
    _quantity = quantity; 
} 

回答:hereを参照してください。

+0

すばやい返信ありがとうございます。私はそれらを変更できない(または値を割り当てる)ことができないと考えていたため、最初は宣言していませんでした。セッター(これはうまくいかない)を使ってなぜこれが違うのか理解できますか?彼らは値を受け取った後でのみ最終的に設定されるからですか?それともコンストラクターで作成されたのでしょうか? – Immanuel

+1

ファイナルは、コンストラクタによるオブジェクトの作成時にのみ設定できます。 – zeb

+0

ありがとうございます! – Immanuel

1

あなたがコンセプトにデータ隠蔽を知っている必要がありますまず、あなたの質問に答えるために

あなたがアクセス権を与えていないことにより、データを非表示にすることができますが(アクセス方法のないプライベートスコープを意味する)

ので、この例ではあなたに書くことができます上記の例では

public class FoodItem { 

    private int quantity; 
    private String name; 
    private int cost; 

    public FoodItem (String name, int cost, int quantity){ // 
     this.name = name; 
     this.cost = cost; 
     this.quantity = quantity; 
    } 

    public String getName(){ return name;} 
    public int getCost(){ return cost;} 
    public int getQuantity(){ return quantity;} 
    // providing a setter so that some one can change the quantity 
    public void setQuantity(int quantity){ this.quantity = quantity;} 

} 

の下に、私はname用セッターを提供していないとcostので誰もそれらにアクセスすることはできませんし、誰が(それらが作成されている場合を除いて)、それらの値を変更することはできませんと泉のためにあなたがそれを変更することができますので、私はセッターを提供している理由ですので、いくつかの場合は、obj.setQuantity(<new quantity>);メソッドを呼び出すことができます

希望を持っています。

+0

これはOPが尋ねるものとは関係ありません – Yar

+0

コメントありがとうございましたしかし、ヤールは正しいです、私は具体的に「最終的な」宣言を求めていました。 – Immanuel

+0

私はImmanuelに同意しました。私は最終的な変数を常に静的であると宣言していたので、私はこれを知らなかったのです。しかし、新しいことを学んだ。ありがとうございました。 –

関連する問題