Var-Args

Status
Nicht offen für weitere Antworten.
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:

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... ????
 
M

MrChance

Gast
Festhalten kann man wohl dieses:
Es wird wohl zuerst in der KlasseA nach einer passenden
Methode gesucht. Wird eins gefunden, wird als nächstes
geschaut, ob dieser überschrieben worden ist. Da es keine
exakt passende Methode in KlasseB gibt; wird die Methode
A.alpha(int...) als nicht überschrieben angesehen und
ausgeführt.

Das ist aber eine böse Falle :)

Oder gibt es eine andere Erklärung ?
 
B

Beni

Gast
Der Compiler muss bereits zu Compile-Zeit entscheiden, welche Methoden aufgerufen werden. In diesem Fall besitzt die A-Klasse (der Compiler weiss nicht, dass später ein B-Objekt hinter der Referenz "a" steckt) nur eine einzige Methode "alpha", für den Compiler ist also alles klar.

Da die "alpha"-Methode der B-Klasse die "alpha"-Methode aus A nicht überschreibt (es werden andere Argumente benötigt...), wird der Aufruf auch nicht zur Laufzeit umgebogen.
 
M

MrChance

Gast
Könnt ihr mal einen Entscheidungsbaum posten, wie der
Compiler oder JVM die richtige Methode aussucht ???
 
M

MrChance

Gast
... ich meine, nicht für diesen speziellen Fall, sondern Allgemein.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E String zerlegen aus args Java Basics - Anfänger-Themen 1
N Wozu nutzt man in der Main Methode das args Array? Java Basics - Anfänger-Themen 10
melly_ Verständnisfrage zu args Java Basics - Anfänger-Themen 3
J Frage zu: public static void main (String[]args) Java Basics - Anfänger-Themen 1
V Use of String[] args Java Basics - Anfänger-Themen 13
B Kommandozeile Übergangsmechanismus args Java Basics - Anfänger-Themen 5
dave253 Was bedeutet (String args[])? Java Basics - Anfänger-Themen 6
S Java String[]args Übergabeparameter Java Basics - Anfänger-Themen 2
N Erste Schritte StdIn vs args[] und Arrays vs "Einzelinitialisierung" Java Basics - Anfänger-Themen 6
T Double.parseDouble(args[0]) Java Basics - Anfänger-Themen 13
T Bitte um Hilfe bei Aufgabe: Long zahl = Long.parseLong(args [0]); Java Basics - Anfänger-Themen 3
L Frage zu args[] im Programm Java Basics - Anfänger-Themen 10
B ja ja schon wieder einer mit einer public static void main(string[] args) Frage... Java Basics - Anfänger-Themen 8
P args ausgeben Java Basics - Anfänger-Themen 3
R string aller args[] ? Java Basics - Anfänger-Themen 8
B func(Object ....args) korrekt weitergeben Java Basics - Anfänger-Themen 4
HoloYoitsu args-Parameter durchschleifen (Schnittstelle erweitern?) Java Basics - Anfänger-Themen 27
B Erste Schritte Java IDE schreibt "(String[] args)" Java Basics - Anfänger-Themen 5
B Socket, args Java Basics - Anfänger-Themen 22
V Erste Schritte Bedeutung von args Java Basics - Anfänger-Themen 10
E Methoden public static void main(String[] args) Java Basics - Anfänger-Themen 9
G Parameter an main(String[] args) übergeben Java Basics - Anfänger-Themen 6
H main args OutOfBounceExeption Java Basics - Anfänger-Themen 4
C String[] args Java Basics - Anfänger-Themen 4
F String args[] Frage... Java Basics - Anfänger-Themen 5
K Input/Output switch case - Parameterübergabe args[0] Java Basics - Anfänger-Themen 34
S Main Methode String... args Java Basics - Anfänger-Themen 2
Developer_X String[]args nutzen, wie? Java Basics - Anfänger-Themen 7
B Programmstart und Parameter/args Java Basics - Anfänger-Themen 4
M args[] während des Programmlaufes eingeben Java Basics - Anfänger-Themen 5
Ö args zuweisen Java Basics - Anfänger-Themen 2
B args[0] auf Anzahl Zeichen überprüfen Java Basics - Anfänger-Themen 29
M Exception args[0] Java Basics - Anfänger-Themen 16
D Args in andere Klasse transferieren Java Basics - Anfänger-Themen 2
V Wofür steht das args / arguments in Main Methode Java Basics - Anfänger-Themen 4
bugmenot args parsen Java Basics - Anfänger-Themen 3
C public static void main(String[] args) Java Basics - Anfänger-Themen 6
T String[] args ausgeben Java Basics - Anfänger-Themen 10
L Zugriff auf args[0] in "Test1View" in Netbeans - J Java Basics - Anfänger-Themen 2
G Was ist public static void main(String[] args)? Java Basics - Anfänger-Themen 12
C args[] als statische Variablen speicher oder wie? Java Basics - Anfänger-Themen 12
S Effektive args[] Behandlung Java Basics - Anfänger-Themen 16
G args[] parameter übergeben. Java Basics - Anfänger-Themen 3
L feststellen ob args[2] gesetzt ist? Java Basics - Anfänger-Themen 2
M public static void main(String... args)<- Was bedeutet das? Java Basics - Anfänger-Themen 5
G args definieren in netbeans Java Basics - Anfänger-Themen 4
N public static void main(String args[]) Java Basics - Anfänger-Themen 6
D args und parameterübergabe Java Basics - Anfänger-Themen 8
G public static void main(final String[] args) Java Basics - Anfänger-Themen 4
X Was genau heißt "public static void main(String[] args) Java Basics - Anfänger-Themen 4
B public static void main (String[] args) ??? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben