Wenn die Klassennummer abstrakt ist, warum darf ich dann Nummer n = 5 schreiben?

8

Number n = new Number(5) ist illegal, Number n = 5 jedoch nicht. Warum?

    
andandandand 16.12.2009, 16:18
quelle

4 Antworten

26

Wegen Autoboxieren. 5 ist kein Objekt, daher wird es in ein Objekt eingeschlossen ( Integer in diesem Fall), und Integer ist ein Number .

    
Bombe 16.12.2009, 16:19
quelle
4

Grundlegend ist es, weil Number eine abstrakte Klasse ist - dort ist kein Konstruktor, der Number(5) entspricht, und selbst wenn es wäre, wäre es immer noch nicht möglich, die Klasse direkt zu instanziieren, weil Es ist abstrakt.

Wie Bombe erklärt, erstellen Sie in Ihrem zweiten Fall ein Integer -Objekt *, das einer Unterklasse von Number zugewiesen werden kann. Und da es sich um eine konkrete Klasse handelt, können Sie sie instanziieren.

* Obwohl es in der Praxis eher mit Integer.valueOf(5) übereinstimmt, wird auf Sun JREs kein zusätzliches Integer-Objekt erstellt, sondern eine gepoolte Version (wie das Flyweight-Muster).

    
Andrzej Doyle 16.12.2009 16:24
quelle
3

Es ist ähnlich wie das Folgende funktionieren würde:

%Vor%

List ist eine Schnittstelle, daher können Sie sie nicht direkt instanziieren. Sie können jedoch eine Variable vom Typ List deklarieren und ihr dann ein konkretes Objekt zuweisen, das diese Schnittstelle implementiert. In derselben Richtung können Sie eine Variable vom Typ Number deklarieren und ihr ein beliebiges Wertobjekt zuweisen, das eine konkrete Instanz dieses Typs ist. Was Sie mit dem Funktionscode gemacht haben, ist (durch Autoboxing) in jeder Hinsicht:

%Vor%     
RHSeeger 17.12.2009 14:46
quelle
-2

Es sollte nicht sein. Autoboxing ist ein großer Fehler.

    
irreputable 16.12.2009 18:04
quelle

Tags und Links