M
MrChance
Gast
Hallo !
Soweit ich weiss, wird zur Bestimmung der aufzurufenden Methode (mit gleichem Bezeichner) nach dieser
Reihenfolge gegangen:
- Anzahl Parameter (und Typen)
- Bei primitiven Typen, evtl. erweitern
- Boxen/Unboxen
- Var-Args
Erklärungsbedarf hab ich in diesem Fall:
Wieso wird beim ersten Aufruf nicht die spezifischere Methode B.alpha(int i) aufgerufen, sondern
die Methode A.alpha(int... i) ??? Wenn A.alpha(int... i) in KlasseB wäre, käme es dazu. Aber wenn
es vererbt wurde nicht... ????
Soweit ich weiss, wird zur Bestimmung der aufzurufenden Methode (mit gleichem Bezeichner) nach dieser
Reihenfolge gegangen:
- Anzahl Parameter (und Typen)
- Bei primitiven Typen, evtl. erweitern
- Boxen/Unboxen
- Var-Args
Erklärungsbedarf hab ich in diesem Fall:
Code:
class KlasseA {
public void alpha (int... a){ System.out.println("A.alpha"); }
public void beta (int a) { System.out.println("A.beta"); }
}
class KlasseB extends KlasseA {
public void alpha (int a){ System.out.println("B.alpha"); }
public void beta (int a){ System.out.println("B.beta"); }
}
und :
public static void main(String[] args) {
a.alpha(1); // = A.alpha
// b.alpha(1); // = B.alpha
// a.beta(1); // = B.beta
// b.beta(1); // = B.beta
}
Wieso wird beim ersten Aufruf nicht die spezifischere Methode B.alpha(int i) aufgerufen, sondern
die Methode A.alpha(int... i) ??? Wenn A.alpha(int... i) in KlasseB wäre, käme es dazu. Aber wenn
es vererbt wurde nicht... ????