2016-09-29 5 views
0

Javaコードを実行したところ、私はそれを得ることができませんでした。 はなぜdiameter内部変数の "this"パラメータを持たないJavaメソッド

class Shape { 
    public double area() 
    { 
     return 0; 

    } 
} 


class Circle extends Shape {     
    Circle (double diameter) {     
     this.diameter = diameter; 
    } 
    private static final double PI = Math.PI; 
    private double diameter;      

    public double area() {      
     double radius = diameter/2.0; <-------- LOOK HERE 
     return PI * radius * radius; 
    } 

} 

public class Main { 
    public static void main(String[] args) { 
     Shape s1 = new Circle (2.5); 
     System.out.println (s1.area()); 

    } 
} 

の前でthisをputingせずに作業以下のコードは、コードがあなたのコンストラクタCircle(double diameter)

+0

同じクラスのメンバ変数にアクセスするために 'this'は必要ありません。メンバ変数と関数引数を区別するためにメンバ変数を参照するのにほとんど使用されます。 – Rambler

+0

私はs1 = newを使っています... s2 = newを直径の異なる値で使うとどうなりますか?どのオブジェクトに 'diameter'が属しているかをどうやって知っていますか? – 123onetwothree

+0

シンプルなスタイルガイド:オブジェクト属性を参照する場合、またはオブジェクトクラス内のオブジェクト自体を参照する場合は 'this'を使用してください。 – Blobonat

答えて

1

またはthis.diameter/diameterなし...完璧に動作しない、関数のパラメータdiameterはシャドウイングですクラスのフィールド。

this.diameterと書くと、コンパイラは、関数のパラメータではなく、のフィールドを参照しているとみなします。 Javaコンストラクタコードにthis.foo = fooを書き込むことは慣用的です。 this.diameterdiameter両方がフィールドを参照してください:あなたの関数area()

は、そのような曖昧さはありません。

+0

私はまだ理解していない、 'this.diameter'が強制されていたはずです。私は 'area()メソッド'についてしか話していません。 area()に直径パラメータがない場合、デフォルトで 'this'ポインタが使用されていると仮定していますか? – 123onetwothree

+0

@ 123onetwothreeはい。しかし、あなたが混乱している場合は、オブジェクト属性を使用するときとそうでないときにあなたを明確にするために常に 'this'を使うのがよいでしょう。 – Blobonat

+0

私はそれを知っていますが、私は興味がありました。なぜjavaはプログラマーに 'this'を現在のオブジェクトを参照する場所に置くのをやめさせるのですか? – 123onetwothree

関連する問題