これが私の宿題です。
クラス「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.)インスタンス参照を介して静的メンバーにアクセスしないように、これを組み合わせるより良い方法はありますか?
前もって感謝します!
静的メソッドは、インスタンスではなくクラス自体に属します。クラスのインスタンスからstatic
メソッドを呼び出すことはできますが、クラスのインスタンスを使用する必要はなく、使用しないでください。メソッドはstatic
であるにもかかわらず、static
ではないように見えるため、混乱を招く可能性があります。
static
メソッドを呼び出す最もわかりやすい方法は、クラスのインスタンスではなく、クラス名自体を使用してメソッドを呼び出すことです。
return String.format("%02d:%02d:%02d", hours, minutes, seconds);
また、temp
インスタンスはまったく必要ありません。
特定のクラスのインスタンスがそれをcと呼び、関数void foo()
を持っている場合、インスタンスc
を使用してfoo
を呼び出すことに注意してください。 :
c.foo();
実際に呼ばれるのは:
foo(c);
静的関数void foo2()の呼び出し中:
Class.foo2();
見た目通りに呼び出されます。
インスタンスを使用して静的関数を呼び出すと、ユーザーが何をしているかわからない可能性があります。
文字列temp
は実際には使用しないでください。 String.format
として呼び出す必要があります。あなたの質問に答えるには、呼び出しは実際にはtemp
を見ないので、混乱します。