2012-04-08 14 views
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は実際にはどういう意味ですか? 1つのメソッドに1つのMyPointオブジェクトがあるのに対して、2つのメソッドには2 MyPointというオブジェクトがあるのはなぜですか?

答えて

2

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

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

+0

尋ねるのは恥ずかしいですが、なぜパラメータにはclassnameを含めることができますが、Stringやintのような型は含まれないのですか? –

+0

どちらかを含めることができます。 intやbooleanのようなものであれば、シンプルな数字や真偽などのプリミティブなデータ型を指しています。 String、MyPoint、または他のクラス名のようなものであれば、単純なプリミティブ型のデータよりも複雑なオブジェクトの型を意味します – wattostudios

+0

私は誤解されている箇所を知っています。どうもありがとうございました。 –

0

計算方法に違いがあります。最初はインスタンスの状態と2番目のインスタンスで '静的'な方法で行います。

実際の使用状況を確認したい場合があります。それがユーティリティーのようなものなら、それを静的にするほうが意味があります。

0

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

MyPointクラスは、空間上の点を表しています。今度はこのクラスのdistance(Mypoint x)は、パラメータとして渡された参照点からこの点までの距離を返します。静的メソッドは渡された2点間の距離を返します。

0

あなたの問題は静的メソッドに関するのでしょうか?

p1.distance(p2) 

これはMyPointのメンバ関数を呼び出し、この呼び出しはMyPoint P1 の特定のインスタンスからのものであるが

MyPoint.distance(p1, p2) 

は、任意のインスタンスを必要としないMyPointの静的メソッドを呼び出し、しかしMyPointを追加する必要があります。静的メソッドまたはフィールドを参照していることをコンパイラに伝えるために使用します。