1
public class Appointment{
    public TimeInterval getTime();
    {/*implementation not shown*/}

    public boolean conflictsWith(Appointment other)
    {
     return getTime().overlapsWith(other.getTime());
    }
}

public class TimeInterval{
    public boolean overlapsWith(TimeInterval interval)
    {/*implementation not shown*/}
}

私の質問は、return getTime().overlapsWith(other.getTime())ステートメントにあります。getTime()は静的メソッドではないので、オブジェクト参照時のみ使えると思います。しかし、そのステートメントから、オブジェクトは参照されていません。後続のメソッドのオブジェクトを返すことは理解していgetTime()ますが、それ自体はどうですか? 私の同級生は、「conflictsWith()メソッドを使いたいときはオブジェクトを宣言するので、 return ステートメントは次のようになります」という説明を提供していreturn object.getTime().overlapsWith(other.getTime());ます。この説明は正しいですか? つまり、メソッド内で非静的メソッドを使用する場合、オブジェクトを参照する必要がないということですか?

4

3 に答える 3

6

は静的メソッドではないためgetTime()、現在のオブジェクトで呼び出されます。実装は次と同等です

public boolean conflictsWith(Appointment other)
{
  return this.getTime().overlapsWith(other.getTime());
}

conflictsWith()次のように、Appointmentオブジェクトに対してのみ呼び出します。

Appointment myAppt = new Appointment();
Appointment otherAppt = new Appointment();
// Set the date of each appt here, then check for conflicts
if (myAppt.conflictsWith(otherAppt)) {
  // Conflict
}
于 2012-04-05T02:13:52.700 に答える
2

非静的メソッドを呼び出すと、オブジェクトthisが暗示されます。実行時に、thisオブジェクトは操作対象のオブジェクトのインスタンスを参照します。あなたの場合、それは外側のメソッドが呼び出されたオブジェクトを参照します。

于 2012-04-05T02:12:53.150 に答える
0

Appointment 内では、getTime() は this.getTime() と同等です。

conflictsWith は次のように書き換えることができます。

TimeInterval thisInterval = this.getTime(); // equivalent to just getTime()
TimeInterval otherInterval = object.getTime();
return thisInterval.overlapsWith(otherInterval);
于 2012-04-05T02:20:18.203 に答える