# Polymorphie byte int Wunder



## Nummer6800 (7. Mrz 2015)

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


```
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 (7. Mrz 2015)

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.


----------



## Nummer6800 (7. Mrz 2015)

Natuerlich vom Datentyp Top. Also das Problem ist geloest!


----------



## tommysenf (7. Mrz 2015)

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


----------



## Nummer6800 (7. Mrz 2015)

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 (7. Mrz 2015)

"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.


----------

