web-dev-qa-db-ja.com

Java宿題のヘルプ(インスタンス参照を介した静的メンバーへのアクセス)

これが私の宿題です。


クラス「Clock」のクラス宣言を記述します。時間、分、秒(すべて整数)のインスタンス変数が必要です。また、以下に示す形式で時刻を表示するtoString()メソッドも必要です。 a)時計のインスタンスを作成し、b)時計の時間、分、秒を設定し、c)getTime()を使用して時計の時間を表示するために、別の「ClockDriver」クラスを記述します。 36ページのDogクラスの例をガイドとして使用してください。以下にサンプルを示します。

時間は3:45:00です

//両方のゼロを取得できなくても心配しないでください

// 2番目のフィールド。それはフォーマットの問題です

//後で処理します


これが私の時計クラスです:

class Clock  {

int hours;
int minutes;
int seconds;


public String toString() {

    String temp = ("");
    return temp.format("%02d:%02d:%02d", hours, minutes, seconds);

} //end method toString

public void getTime() {

    System.out.print("The time is " + toString());

} //end method getTime

} //end class Clock

そして、ここに私のClockDriverクラスがあります:

public class ClockDriver {

    public static void main (String[] args) {

        Clock c = new Clock();
        c.hours = 4;
        c.minutes = 30;
        c.seconds = 00;
        c.getTime();

    } //end main

} //end class ClockDriver

正常にコンパイルされてうまく動作しますが、IDEから警告が出ていると思います

return temp.format("%02d:%02d:%02d", hours, minutes, seconds);

行はインスタンス参照を介して静的メンバーにアクセスしています。具体的には、

temp.format

ビット。

だから私の質問は:

1.)インスタンス参照を介して静的メンバーにアクセスする必要がないのはなぜですか?

2.)インスタンス参照を介して静的メンバーにアクセスしないように、これを組み合わせるより良い方法はありますか?

前もって感謝します!

24
Bit Deception

静的メソッドは、インスタンスではなくクラス自体に属します。クラスのインスタンスからstaticメソッドを呼び出すことはできますが、クラスのインスタンスを使用する必要はなく、使用しないでください。メソッドはstaticであるにもかかわらず、staticではないように見えるため、混乱を招く可能性があります。

staticメソッドを呼び出す最もわかりやすい方法は、クラスのインスタンスではなく、クラス名自体を使用してメソッドを呼び出すことです。

return String.format("%02d:%02d:%02d", hours, minutes, seconds);

また、tempインスタンスはまったく必要ありません。

42
rgettman

特定のクラスのインスタンスがそれをcと呼び、関数void foo()を持っている場合、インスタンスcを使用してfooを呼び出すことに注意してください。 :

c.foo();

実際に呼ばれるのは:

foo(c);

静的関数void foo2()の呼び出し中:

Class.foo2();

見た目通りに呼び出されます。

インスタンスを使用して静的関数を呼び出すと、ユーザーが何をしているかわからない可能性があります。

2
TomF

文字列tempは実際には使用しないでください。 String.formatとして呼び出す必要があります。あなたの質問に答えるには、呼び出しは実際にはtempを見ないので、混乱します。

0
tbodt