Number n = new Number(5)
è illegale, ma non lo è Number n = 5
. Perché?Se il numero di classe è astratto perché sono autorizzato a scrivere il numero n = 5?
risposta
A causa di autoboxing. 5
non è un oggetto quindi è racchiuso in un oggetto (Integer
in questo caso) e Integer
è un Number
.
Fondamentalmente, è perché Number
è una classe astratta - ci è nessun costruttore che corrisponde a Number(5)
, e anche se ci fosse ancora non sarebbe in grado di creare un'istanza della classe direttamente perché è astratta.
Come spiega Bombe, nel secondo caso si sta veramente creando un oggetto Integer
* - che, come sottoclasse di Number
, può essere assegnato a tale variabile. E siccome è una lezione concreta, puoi istanziarla.
* Anche se in pratica è in realtà più equivalente a Integer.valueOf(5)
, che su Sun JRE non creerà un oggetto Integer aggiuntivo ma utilizzerà una versione in pool (come il modello Flyweight).
perché deve essere una classe statica? –
+1 la tua risposta è molto meglio di quella di Bombe, non ha nemmeno usato la parola abstract nella sua risposta, ecco di cosa si trattava – whiskeysierra
@Carlos - Intendevo * concreto * di classe, non statico; Ho corretto questo errore ("thinko"?), Grazie per averlo indicato. AFAIK non esiste una classe statica di per sé (ignorando le classi interne statiche che sono una cosa separata). –
Non dovrebbe essere. l'autoboxing è un grosso errore.
Non sarei d'accordo. int è l'errore. Il linguaggio sarebbe più semplice, tutto è stato definito come numero intero (o lungo o qualsiasi sottoclasse di numero). Quindi il compilatore lo ottimizza in un int (o qualunque primitiva). Ovviamente dovrebbe gestire == in modo sensato . – MrJacqes
E 'simile a come il seguente dovrebbe funzionare:
List bob = new ArrayList();
List è un'interfaccia, quindi non è possibile creare un'istanza direttamente. Tuttavia, è possibile dichiarare una variabile di tipo List e quindi assegnarvi un oggetto concreto che implementa tale interfaccia. Sulla stessa linea, è possibile dichiarare una variabile di tipo Numero e quindi assegnarvi qualsiasi oggetto valore che sia un'istanza concreta di quel tipo. Quello che hai fatto con il codice funzionale è, per tutti gli effetti (a causa di autoboxing):
Number n = new Integer(5);
- 1. javascript se il numero maggiore di numero
- 2. Python - restituisce il numero più grande di N liste
- 3. Come verificare se il numero è NaN
- 4. numero di modi per rendere il cambiamento di importo N
- 5. jQuery - come contare il numero di li e aggiungerne uno se il numero è dispari?
- 6. conta il numero di stringa binaria di lunghezza n ripetibile
- 7. Contare il numero di "trues" per n booleans
- 8. controllo Java se il numero di intervallo
- 9. Come mostrare il primo n numero di elementi in jQuery?
- 10. Intervallo query il numero di inversione di O (lg N)
- 11. Perché sono autorizzato a copiare unique_ptr?
- 12. Test XPath se il valore del nodo è il numero
- 13. galleggiante a caso il numero
- 14. Divisione di una stringa/numero ogni n. Carattere/numero?
- 15. Restituisce il numero n recente di tweet utilizzando TweetSharp
- 16. Regola il numero di righe da formare :: Textarea Laravel 5
- 17. Come eseguire il ciclo di una va_list se il numero di argomenti è sconosciuto?
- 18. PHP - Se il numero è divisibile per 3 e 5 then echo
- 19. Rails nidificati N + 1 numero di query
- 20. numero di parentesi per il numero fisso di coppie "()"
- 21. XSLT format-numero decimale, il numero a meno di un
- 22. Genera un numero casuale a N cifre
- 23. Perché è utile contare il numero di bit?
- 24. Laravel 5 Cache/Paginate Numero
- 25. Il vettore :: shrink_to_fit è autorizzato a riallocare?
- 26. trovare il numero di possibili Alphabet stringhe da Numero Array
- 27. Perché 4 non è un'istanza di Numero?
- 28. Convertire il numero specificato in numero
- 29. Verificare se stringa è il numero in Android
- 30. Se var è il numero, per lo script
Per verificare da soli Just Add System.out.println (n.getClass() getName().); – Buhb
La domanda era principalmente sulle classi astratte. – whiskeysierra
No, si trattava di "come funziona' Number n = 5; 'funziona se' Number' è astratto? "Vedi sopra per come funziona. :) – Bombe