2013-12-16 27 views
6

Sup ragazzi, ho una domanda semplice, ma bugging. Per quanto ho capito, static significa sostanzialmente che, per ogni singola istanza di quella classe, questo metodo sarà lo stesso, se lo cambiamo, questo cambierà per ogni singola istanza di quella classe, è anche noto come Metodo di Classe. Beh, se ho una classe che implementa toString() metodo strega per un certo formato, diciamo:Perché toString() non può essere un metodo statico?

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

Perché non può essere impostata come statica? Dato che questo formato sarà lo stesso per ogni singola istanza di quella classe ...?

+6

Pensa a xey. Se sono campi non statici, un metodo statico non può accedervi. –

+0

@PatriciaShanahan, così dici che se xey erano valori statici, il metodo toString() poteva essere impostato come statico? –

+0

La tua comprensione di 'static' è leggermente disattivata. 'static' significa che viene creata una sola istanza (almeno per le variabili). È possibile accedere a variabili/metodi 'static' senza nemmeno istanziare un oggetto (ad esempio' ClassName.toString() '. Inoltre, non è necessario creare un nuovo metodo per ogni oggetto, hanno tutti lo stesso metodo disponibile – Justin

risposta

8

Questo non si applica solo alle toString()

Il Java Language Specification dice

Si tratta di un errore di compilazione se un metodo statico hides un'istanza metodo.

Poiché il metodo di istanza toString() è implicitamente ereditato da Object, dichiarare un metodo come toString()static in un sottotipo causa un errore di compilazione.

Da un punto di vista Orientato agli oggetti, vedere le altre risposte a questa domanda o related domande.

+0

in questo caso, si applica a 'equals()', 'hashCode()', ecc. – Justin

+0

@Quincunx Sì, qualsiasi metodo di istanza visibile. –

4

Poiché un metodo statico non può accedere ai campi di istanza. Inoltre, toString() è specificato da java.lang.Object, quindi è necessario disporre di un'istanza di Object per richiamare toString() su. Infine, se toString() fosse statico, dovrebbe accettare istanze di Object (in quale altro modo è possibile chiamare toString() su una n istanza di una classe?).

Problemi correlati