2012-04-08 1 views
0

동일한 이름을 가진 두 가지 메소드의 차이를 이해하려고합니다. 이 Object 변수 유형은 무엇을 의미합니까?

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은 실제로 무엇을 의미합니까? 하나의 메소드에 하나의 MyPoint 객체가있는 반면 다른 메소드에는 2 MyPoint 객체가있는 이유는 무엇입니까?

답변

2

MyPoint은 개체 유형입니다. 예를 들어, distance(MyPoint p1, MyPoint p2) 메서드에서이 메서드에 2 개의 개체를 전달한다는 의미입니다. 첫 번째 개체는 MyPoint 개체는 p1이고 두 번째 개체는 MyPoint 개체는 p2입니다.

두 println 문의 차이점은 첫 번째 문은 distance(MyPoint) 메서드를 실행하고 두 번째 문단은 distance(MyPoint, MyPoint) 메서드를 실행한다는 것입니다. 또한 첫 번째 메서드는 MyPoint p1 개체에서 메서드 (p2)로 전달 된 개체로 distance()을 실행하는 반면 두 번째 distance() 메서드는 메서드에 전달 된 개체 (p1p1) 사이의 거리를 계산하는 정적 호출입니다. p2).

+0

물어볼 때 당황 스럽지만 왜 매개 변수에는 클래스 이름을 포함 할 수 있지만 String이나 int와 같은 유형은 포함 할 수 없습니까? –

+0

둘 중 하나를 포함 할 수 있습니다. int 또는 boolean과 같은 경우, 단순한 숫자 또는 참/거짓과 같은 기본 유형의 데이터를 참조합니다. String, MyPoint 또는 다른 클래스 이름과 같은 객체라면 객체의 유형을 의미합니다. 단순한 기본 유형의 데이터보다 복잡 할 수 있습니다. – wattostudios

+0

내가 잘못 이해 한 부분을 알고 있습니다. 고맙습니다. –

0

차이점은 계산 방법에 있습니다. 첫 번째는 인스턴스의 상태와 두 번째 인스턴스에서 '정적'방식으로 수행합니다.

실제 사용법을 살펴볼 수 있습니다. 유틸리티와 같으면 정적으로 만드는 것이 더 적합합니다.

0

거리는 입력으로 주어진 두 점 사이의 거리를 계산하는 데 사용되는 방법입니다.

클래스 MyPoint는 공간상의 지점을 나타냅니다. 지금이 방법의 거리 (Mypoint x)는이 지점에서 매개 변수로 전달 된 참조 점으로부터이 지점까지의 거리를 제공합니다. 정적 방법은 전달 된 두 점 사이의 거리를 단순히 반환합니다.

0

문제가 정적 방법 인가요?

p1.distance(p2) 

이 MyPoint의 멤버 함수를 호출이 호출 MyPoint (P1)의 특정 인스턴스 내지 그러나

MyPoint.distance(p1, p2) 

모든 인스턴스를 필요로하지 않는다 MyPoint의 정적 메소드를 호출하지만 MyPoint를 추가해야합니다. 컴파일러에게 정적 메소드 또는 필드를 참조하도록 지시합니다.