2013-12-16 17 views
6

Sup faceci, mam proste, ale dręczące pytanie. O ile rozumiem, static zasadniczo oznacza, że ​​dla każdej pojedynczej instancji tej klasy ta metoda będzie taka sama, jeśli ją zmienimy, zmieni się ona dla każdego wystąpienia tej klasy, jest również znana jako Metoda klasy. Cóż, jeśli mam klasy, która implementuje toString() metoda czarownica określonym formacie, powiedzmy:Dlaczego toString() nie może być metodą statyczną?

public String toString() { 
    return "(" + x + "," + y + ")"; 
} 

Dlaczego nie może być ustawiony jako statyczny? Ponieważ ten format będzie taki sam dla każdego wystąpienia tej klasy ...?

+6

Pomyśl o X i Y. Jeśli są to pola niestatyczne, metoda statyczna nie może uzyskać do nich dostępu. –

+0

@ PatriciaShanahan, więc mówisz, że jeśli x i y były wartościami statycznymi, metoda toString() mogła być ustawiona jako statyczna? –

+0

Twoje zrozumienie "statycznego" jest lekko wyłączone. "static" oznacza, że ​​tworzone jest tylko jedno wystąpienie (przynajmniej dla zmiennych). Możesz uzyskać dostęp do "statycznych" zmiennych/metod bez tworzenia instancji obiektu (np. 'ClassName.toString()'. Nie musisz również tworzyć nowej metody dla każdego obiektu, wszystkie mają tę samą metodę, która jest dostępna – Justin

Odpowiedz

8

ta nie dotyczy tylko toString()

Java Language Specification mówi

Jest to błąd kompilacji, jeśli statyczną metodą hides instancją metoda.

Ponieważ sposób wystąpienie toString() niejawnie odziedziczone Object, stwierdzając, sposób toString() jako static w Podtyp powoduje błąd kompilacji.

Z punktu widzenia obiektu zobacz inne odpowiedzi na to pytanie lub pytania: related.

+0

w takim przypadku dotyczy 'equals()', 'hashCode()', itp. – Justin

+0

@Quincunx Tak, każda widoczna metoda instancji. –

4

Ponieważ metoda statyczna nie może uzyskać dostępu do pól instancji. Ponadto, toString() jest określony przez java.lang.Object, więc musisz mieć instancję obiektu, aby wywołać toString() na. Wreszcie, jeśli toString() byłby statyczny, musiałby zaakceptować wystąpienia obiektu (jak inaczej można wywołać metodęString() na n instancji klasy?).