upcasts

Status
Nicht offen für weitere Antworten.
S

saschaappel

Gast
Hallo zusammen

Warum geht dieser cast nicht:

JDialog dia = (JDialog)new Container();

aber dieser geht paint( (Graphigs2D) g) ) {

}


das sind doch beides upcasts?????????????

Das problem ist das ich zwei objekte habe und ich möchte eins zum anderen casten:

Object 1:

public class ResourceNode extends DefaultMutableTreeNode implements TreeCellRenderer , ResourceInterface {
......
}

Object 2:
public class NcDrillNode extends ResourceNode implements NcDrillTabNodeInterface {
.......
}

Aber dieser cast geht nicht:
ResourceNode node1 = new ResourceNode();
NcDrillNode node = (NcDrillNode) node1;

kommt immer java.lang.ClassCastException
Ich dachte aber auch upcasts sind möglich wenn sie in der vererbung zueinander sind?????

Kann mir da einer helfen ?

Thx

Sascha
 

mischer

Aktives Mitglied
Hi Sascha,

versuch doch einfach mal in NcDrillNode ein Konstruktor zu schreiben, der ein RecourceNode-Objekt aufnimmt und kopiere dann per Hand alle notwendigen Daten. Ich denke mal die ClassCastException kommt von deinem ...implements NcDrillTabNodeInterface - kenn mich zwar damit nicht wirklich aus aber ich meine es sollte daher kommen.

MfG
mischer
 

Mag1c

Top Contributor
Hi,

was verstehst du denn unter einem "upcast" ? Ein Container ist KEIN JDialog. Deshalb kannst du den Container nicht auf JDialog casten. Genauso kannst du nicht ein ResourceNode auf NcDrillNode casten. Was dagegen funktioniert ist:

Code:
Container cont = new JDialog();
JDialog dialog = (JDialog) cont;

ResourceNode node = new NcDrillNode();
NcDrillNode drillNode = (NcDrillNode) node;

Gruß
Mag1c
 
S

saschaappel

Gast
Ok habe verstanden das es nicht geht....

Aber warum machen die bei paint so eine sache???

warum nicht gleich paint( Graphics2D )
warum paint ( (Graphics2D) g)

intern muss ja sowiso schon ein Graphics2D onject übergeben werden sonst würde der cast ja auch nicht funktionieren oder?

Thx
 

Mag1c

Top Contributor
Kompatibilität. Das Graphics2D gibts seit Java 1.2 glaub ich, die Paint-Methode gibts schon von Anfang an.

EDIT: Ja genau, der Cast funktioniert nur, weil da immer ein Graphics2D kommt.

EDIT2: Wenn du die paint-Methode selbst mit einem Graphics2D aufrufst, mußt du natürlich keinen Cast machen.

Gruß
Mag1c
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben