Polymorphie byte int Wunder

Nummer6800

Aktives Mitglied
Ausgegeben wird tatsächlich Sub.mth. Obowhl ich doch eine 1 uebergebe. Der Datentyp byte aus class Subsub kennt doch auch die 1?
JAVA: 3.2.3 byte, short, int, long

Java:
public class Top {
 public void mth(int v){
  System.out.println("Top.mth");
 }
}

public class Sub extends Top {
 public void mth(int v){
  System.out.println("Sub.mth");
 }
}

public class Subsub extends Sub {
 public void mth(byte v){ // hier byte statt int
  System.out.println("Subsub.mth");
 }
}

public class Ab {
	public static void main(String[] args) {
		Top t;
		t = new Subsub();
		t.mth(1); // hier uebergebe ich die eins
	}
}
 

Nummer6800

Aktives Mitglied
Also das Objekt ist doch vom Datentyp t! Und die hat doch keine Methode mit dem Byte drin! Da hat der Professor dich aber hereingelegt.
 

tommysenf

Top Contributor
Die Erklärung ist falsch. Die int Methode wird aufgerufen weil Java eine 1 standardmäßig als int und nicht als Byte behandelt.
 

Nummer6800

Aktives Mitglied
Sicher? Wie spreche ich dann den Datentyp byte an. Laut Link erhaelt er auch eine 1.

Ich habe das in anderen Bereichen getestet. Da konnte ich auf die Methoden auch nur zugreifen, wenn sie schon in der Oberklasse definiert wurde.
Ich dachte das waere hier das gleiche.

Jetzt habe ich es mit long getestet, anstatt byte. Und habe das gleiche Ergebnis raus wie bei byte.
 

Nummer6800

Aktives Mitglied
"Ausgabe von Sub.mth (Instanz von Subsub, aber Methode mth ist überladen und geerbte Implentierung void mth(int) passt ohne implizite Typenumwandlung)"

Das ist die Professor Begruendung.

Anders ausgedrueckt bedeutet es doch: Also die Methode kommt von der Oberklasse. In Unterklasse findet sich keine Passende. Ausser die Geerbte.
Und der Referenztyp hat die ueberladene Methode doch gar nicht. Folglich wird die Geerbte also ausgefuehrt.
 

Neue Themen


Oben