2013-12-16 3 views
6

녀석, 나는 간단하지만 도청 질문이 있습니다. 필자가 이해하는 한, static은 기본적으로 해당 클래스의 모든 단일 인스턴스에 대해이 메소드가 동일 할 것임을 의미합니다. 변경하면이 클래스의 모든 단일 인스턴스에 대해 변경되며 클래스 메소드라고도합니다. 내가 toString() 방법은 특정 형식을 마녀 구현하는 클래스가 있다면 음, 이제 가정 해 봅시다 :toString()을 정적 메서드로 사용할 수없는 이유는 무엇입니까?

public String toString() { 
    return "(" + x + "," + y + ")"; 
} 
가 정적으로 설정 될 수없는 이유는 무엇

? 이 형식은 해당 클래스의 모든 단일 인스턴스에 대해 동일하므로 ...?

+6

x와 y에 대해 생각해보십시오. 비 정적 필드 인 경우 정적 메서드는 해당 필드에 액세스 할 수 없습니다. –

+0

@PatriciaShanahan 그래서 x와 y가 정적 값이면 toString() 메서드를 정적으로 설정할 수 있다고 말합니까? –

+0

'정적'에 대한 이해는 약간 꺼져 있습니다. 'static '은 적어도 하나의 인스턴스 만 생성된다는 것을 의미합니다 (적어도 변수에 대해서는). 'ClassName.toString() '과 같이 객체를 인스턴스화하지 않고도'static' 변수/메소드에 접근 할 수 있습니다 또한 객체마다 새로운 메소드를 만들 필요가 없으며 모두 동일한 메소드를 사용할 수 있습니다 – Justin

답변

8

이 적용되지 않는 경우에만에 toString()

Java Language Specification 그것은 컴파일 타임 오류가

라고하면 정적 메서드 hides 인스턴스 방법. 인스턴스 메소드 toString() 암시 서브 타입 static 같은 방법 toString()를 선언 Object로부터 상속되므로

컴파일시 에러를 야기한다.

개체 지향적 인 관점에서이 질문에 대한 다른 대답이나 related 질문을 참조하십시오.

+0

일 경우'equals()','hashCode()'등등에 적용됩니다. – Justin

+0

@Quincunx 예, 보이는 모든 인스턴스 메소드. –

4

정적 메서드가 인스턴스 필드에 액세스 할 수 없기 때문에. 또한 toString()java.lang.Object으로 지정되므로 toString()을 호출하려면 Object 인스턴스가 있어야합니다. 마지막으로 toString()이 정적 인 경우 Object 인스턴스를 받아 들여야합니다 (클래스 인스턴스에서 toString()을 호출 할 수있는 방법은 무엇입니까?).