0

同じ名前の2つのメソッドの違いを理解しようとしています。これは私が理解しようとしているコードです...

public class Test {
    public static void main(String[] args) {
        MyPoint p1 = new MyPoint();
        MyPoint p2 = new MyPoint(10, 30.5);
        System.out.println(p1.distance(p2));
        System.out.println(MyPoint.distance(p1, p2));
    }
}

class MyPoint {
    .....   
}

public double distance(MyPoint secondPoint) {
    return distance(this, secondPoint);
}

public static double distance(MyPoint p1, MyPoint p2) {
    return Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));
}

誰かが2つのdistance()方法の違いを説明してもらえますか?タイプMyPointは実際にはどういう意味ですか?MyPoint1つのメソッドに1つのオブジェクトがあるのに、他のメソッドには2つのオブジェクトがあるのはなぜMyPointですか?

4

4 に答える 4

2

MyPointオブジェクトのタイプです。distance(MyPoint p1, MyPoint p2)たとえば、このメソッドでは、このメソッドに2つのオブジェクトを渡すことを意味します。最初のオブジェクトはp1というオブジェクトMyPointで、2番目のオブジェクトはMyPointp2という別のオブジェクトです。

2つのprintlnステートメントの違いは、最初のステートメントがdistance(MyPoint)メソッドを実行し、2番目のステートメントがメソッドを実行するdistance(MyPoint, MyPoint)ことです。さらに、最初のメソッドはオブジェクトからメソッド()に渡されdistance()たオブジェクトに実行されますが、2番目のメソッドはメソッド(および)に渡された2つのオブジェクト間の距離を計算する静的呼び出しです。MyPoint p1p2distance()MyPointp1p2

于 2012-04-08T08:14:29.390 に答える
0

違いはあなたが計算している方法にあります。1つ目はインスタンスの状態によって実行し、2つ目は「静的」な方法で実行します。

実際の使用法を確認することをお勧めします。ユーティリティのようなものであれば、静的にする方が理にかなっています。

于 2012-04-08T08:14:40.513 に答える
0

距離は、入力として指定された2点間の距離を計算するために使用される方法です。

クラスMyPointは、空間内のポイントを表します。このクラスのメソッドdistance(Mypoint x)は、パラメーターとして渡された参照ポイントからのこのポイントの距離を示しますが、staticメソッドは、渡された2つのポイント間の距離を返すだけです。

于 2012-04-08T08:18:04.850 に答える
0

たぶんあなたの問題は静的メソッドに関するものですか?

p1.distance(p2)

これはMyPointのメンバー関数を呼び出しますが、この呼び出しはMyPointp1の特定のインスタンスからのものです。

MyPoint.distance(p1, p2)

MyPointの静的メソッドを呼び出します。これはインスタンスを必要としませんが、MyPointを追加する必要があります。静的メソッドまたはフィールドを参照していることをコンパイラーに通知します。

于 2012-04-08T08:21:05.533 に答える