2016-09-29 31 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()); 

    } 
} 

代碼前puting this完美的作品...帶或不帶this.diameter/diameter

+0

您不需要'this'來訪問同一類的成員變量。它主要用於引用成員變量來區分成員變量和函數參數。 – Rambler

+0

Man我使用s1 = new ...如果我使用s2 = new,其直徑值不同,它怎麼知道直徑屬於哪個對象? – 123onetwothree

+0

簡單的樣式指南:當您引用對象屬性或對象類中的對象本身時,請使用'this'。 – Blobonat

回答

1

在你的構造Circle(double diameter),函數參數diameter陰影的類的領域。

除非另有說明(編寫this.diameter),否則編譯器將假定您所指的功能參數爲而非該字段。在Java構造器代碼中編寫this.foo = foo是慣用的。

在你的函數area(),有沒有這樣的歧義:this.diameterdiameter指到外地。

+0

我還是不明白,應該是'this.diameter'強制執行。我只談論'area()方法'。 java是否假設如果area()沒有直徑參數,那麼它默認使用'this'指針呢? – 123onetwothree

+0

@ 123onetwothree是的。但是,如果你感到困惑,那麼最好總是使用'this'來使你在使用對象屬性的時候清晰,而在沒有時使用。 – Blobonat

+0

我知道,但我很好奇,爲什麼java不強制程序員把'this'放在當前對象的地方 – 123onetwothree

相關問題