2016-09-29 3 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 퍼 팅하지 않고 작업 아래의 코드를 않는 이유 가 또는 생성자 Circle(double diameter)에서 this.diameter/diameter

+0

같은 클래스의 멤버 변수에 액세스하는 데 'this'가 필요하지 않습니다. 대부분 멤버 변수를 참조하여 in 및 member 인수의 멤버 변수를 구별합니다. – Rambler

+0

남자 나는 s1 = new를 사용합니다 ... s2 = new를 지름의 다른 값으로 사용하면 어떻게됩니까? 'diameter'가 어떤 오브젝트에 속하는지 어떻게 알 수 있습니까? – 123onetwothree

+0

간단한 스타일 가이드 : 객체 속성이나 객체 클래스 내부의 객체 자체를 참조 할 때'this'를 사용하십시오. – Blobonat

답변

1

없이 ... 완벽하게 작동, 함수 매개 변수 diameter을 그림자입니다 클래스의 필드.

달리 말하면 (this.diameter을 작성하여) 컴파일러는 이 아닌 필드를 참조한다고 가정합니다. Java 생성자 코드에 this.foo = foo을 쓰는 것은 관용적입니다. this.diameterdiameter모두이 필드를 참조 : 함수 area()에서

는, 그러한 모호함이 없습니다.

+0

나는 아직도 이해하지 못한다. 그것은'this.diameter'가 시행 되어야만한다. 나는'area() 메소드'에 대해서만 이야기하고있다. area()에 직경 매개 변수가 없다면 java는 기본적으로'this' 포인터를 사용한다고 가정하고 있습니까? – 123onetwothree

+0

@ 123onetwothree 예. 하지만 혼란 스럽다면 객체 속성을 사용할 때와 그렇지 않을 때를 명확히하기 위해 항상'this'를 사용하는 것이 좋습니다. – Blobonat

+0

나는 알고있다. 그러나 나는 궁금했다. 왜 자바가 프로그래머에게 'this'를 현재 객체를 가리키는 곳으로 넣을 것을 강요하지 않겠습니까? – 123onetwothree

관련 문제