2011-12-21 21 views
0

私は軍事と通常の時間を2つの異なるクラスに表示し、オブジェクトとして宣言された時計を作成します。これは完了ですが、clockクラスを その中にsetAMPM(boolean yes)メソッドを持つAMPMclockがあります。 setAMPM(true)には軍用時間が表示され、falseの場合は標準時間が表示されます。私はブール値を返す他のメソッドとオブジェクトでそれを使用する

AMPMclock clockObject = new AMPMclock(); 

clockObject.setHour(16); 
clockObject.setMin(28); 
clockObject.setSec(58); 



    System.out.println(clockObject.toString()); 
    clockObject.tick(); 
    clockObject.setAMPM(false); 
    System.out.println(clockObject.toString()); 

    clockObject.tick(); 
    clockObject.setAMPM(true); 
    System.out.println(clockObject.toString()); 
    clockObject.tick(); 
    System.out.println(clockObject.toString()); 

は、しかし、私はclockObject.setAMPM(true)またはclockObject.setAMPM(false)を使用研ぐ

class AMPMclock extends clock 
{ 
    boolean setAMPM(boolean yes) 
    { 
     return yes; 
    } 
} 

class clock 
{ 
    private int hours; 
    private int minutes; 
    private int seconds; 
private boolean yes; 

    setMin.... 

    setHour... 

    setSec.... 

    tick() ///moves the clock 1sec 


    public String toString() 
    { 

     if(yes) return String.format("%d:%02d:%02d %s", (hours == 12 || hours == 0)?12 : hours%12, minutes, seconds, (hours < 12)? "AM" : "PM"); 
     else return String.format("%02d:%02d:%02d",hours,minutes,seconds); 
    //else 
    } 

}


MAIN setAMPMメソッドを作成しますyesブール値は変更されないので、別の方法でそれを使用することができます。それはいつも同じまま...どんな助け? TNX

+1

あなたの質問は完全に不明です。問題があることを示すコードを追加してください。 –

+0

このコードは私の目を痛めます。 –

答えて

2

あなたはAMPMインスタンス変数に例の設定を保存する場合は、のようなものが必要です。

boolean ampm = true; 

boolean setAMPM(boolean yes) 
{ 
    ampm = yes; 
    return yes; 
} 
3

セッターのアイデアは、プライベートインスタンス変数をカプセル化することです。クラスの内部状態を変更せずにパラメータを返すだけで、コードに何も「つぶれていない」という理由があります。

class Clock { 

    private boolean useAMPM; 

    public void setAMPM(boolean useAMPM) { 
     this.useAMPM = useAMPM; 
    } 

    public boolean isAMPM() { 
     return this.useAMPM; 
    } 
} 
+1

Java Bean標準に合わせるだけで、ゲッターは 'isAMPM()'になるはずです。 – Marcelo

+0

でも、 "clock"クラスの中でuseAMPMを使う必要があります。 私は "プライベートブールuseAMPM;"と宣言します。クロックを延長しても認識されません。 –

+0

@StefanosVarsanis、AMPMがサブクラスにのみ関連する場合、私はそれが単にサブクラスの実装の詳細になるようにし、必要に応じてToStringをオーバーライドする可能性があります。それ以外の場合は、変数をスーパークラスに入れて、 'private'ではなく' protected'キーワードを使用してサブクラスが認識できるようにする必要があります。欠点は、同じパッケージ内のどのクラスもそれを見ることができることです。それぞれのアプローチを評価して、ニーズに最も適したものを見なければなりません。 –

0

Java Beanの規約に従う必要がありますか。

達成しようとしているのはこれですか?

あなたはおそらくメソッドのラムダリストで

private boolean useAMPM = false; 
    public boolean setAMPM (final boolean wantAMPM) { 
      useAMPM = wantAMPM; 
      return useAMPM; 
    } 
    public void draw() { 
      … 
      if (useAMPM) { /* … */ } else { /* … */ } 
    } 

変数(あなたがwantAMPM/yesのようなメソッドを定義するときに指定するもの)が割り当てられている...メンバ変数にそれを格納する必要が

public class AMPMClock { 

    private boolean isAMPM; 

    public void setAMPM(boolean ampmFlag){ 
    this.isAMPM = ampmFlag; 
    } 
    public boolean isAMPM(){ 
    return this.isAMPM; 
    } 

} 
0

関数が呼び出されたときに呼び出され、関数が返ったときに破棄されます。実際には、の自動変数をJavaプログラムのの(ほとんど)任意のペアの中に作成することもできます。これは同様に破棄されます}ブロックの最後に到達します。

メンバー変数(プロパティ)は、見つかったオブジェクトインスタンスの存続期間にわたって保持されます。したがって、たとえば、 Clock clockInstance = new Clock();と言うと、clock.useAMPMが作成され、clockInstanceが破壊されるまで存在し続けます。

関連する問題