# Ueberladen



## cgame (18. Nov 2012)

Hallo Leute,
habe folgendes Problem und zwar geht es um einen Quellcode den ich garnicht verstehe. Bzw. ich verstehe nicht wie es zu diesem Ergebniss beim Compilieren kommt.

Hiermal der Quellcode

```
public class Ueberladen {
public static int foo(short x,   int y){ return 1;}
public static int foo(long x,   char y){ return 2;}
public static int foo(int x,     int y){ return 3;}
public static int foo(char x, double y){ return 4;}
public static int foo(double x,  int y){ return 5;}
public static int foo(int... x        ){ return 6;}
public static int foo(short x         ){ return 7;}
public static int foo(long x          ){ return 8;}

public static void main(String[] args){
long x1  = (long)  1;
short x2 = (short) 2;
float x3 = (float) 3;

System.out.println(foo(1.0,  x2)); // = 5
System.out.println(foo('x',  x3)); // = 4
System.out.println(foo(x2,   x2));// =1
System.out.println(foo(x2,    1));// = 1
System.out.println(foo(x1,    1));// = 5
System.out.println(foo(x1      ));// = 8
System.out.println(foo((byte)x2));// = 7
System.out.println(foo(1       ));// = 8



 }
}
```

Also was macht das Programm eigenlicht ? 
PS : Ergebnisse als Kommentar im Quellcode

Ich bedanke mich schnonmal für die antworten. Danke


----------



## Fab1 (18. Nov 2012)

Du hast eine Methode 
	
	
	
	





```
foo()
```
 diese erwartet eine unterschiedliche Anzahl bzw. Art von Parameter. Je nachdem was du als Parameter übergibst, wird halt die entsprechende Methode ausgeführt.

bei:

```
System.out.println(foo(2,5,6,2,4,6,2,4,46)); // Lösung: 6
```

Da, du mehrere int's übergibst.


----------



## cgame (18. Nov 2012)

Erstmal danke für die Antwort.
Die Foo() wird mir nicht klar. Wird etwas addiert, subtrahiert oder werden daten ausgelsen ,was wird gemacht ? 

Und wie sieht es bei deinem Beispeil aus. Also wie kommt man auf die Lösung 6

```
System.out.println(foo(2,5,6,2,4,6,2,4,46)); // Lösung: 6
```

Hast du ein ganz leichtes Bsp: für die Methode foo()

Danke ^^


----------



## Fab1 (18. Nov 2012)

Also fangen wir mal anders an. Weißt du denn was Methoden sind? Was Parameter sind? Und was das "return" am Ende der Methode macht?

Hier noch ein Bild, aber ka ob es dadurch wirklich verständlicher wird.

Ist ein abgespeckte Version von dir. Nur eine Methode.

Es ist halt so. Jedes short muss ein integer sein. Da der Zahlenbereich von short innerhalb von Integer liegt. Da du keine Methode hast die als Parameter (double, short) erwartet, wird diese genommen. Ähnlich ist es bei den anderen Datentypen.


----------



## cgame (19. Nov 2012)

Hallo Fab1,

danke für deine Antworten erstmal. Langsam verstehe ich etwas. ^^
Also wie ich jetzt verstanden habe, gibt das return eine Zahl bzw. einen Wert an.Dieser Wert beschreibt je nach Implementierung von welcher Methode die Rede ist.(Wenn ich es richtig verstanden habe.)

Habe noch zwei Fragen :

1) Was ist der unterschied zwischen der foo()- und max() Methode ?
2) Also danke erstmal für die mühe für das Bild. 


```
public static int foo(short x,   int y) // HIer geht man ja von zwei Werten und zwar x und y aus.  
public static void main(String[] args){
long x1  = (long)  1;
short x2 = (short) 2;
float x3 = (float) 3;
System.out.println(foo(1.0,  x2)) // Hier sind auch zwei Werte zu sehen also 1.0 und x2
```
Aber in deinem Bsp:

```
System.out.println(foo(2,5,6,2,4,6,2,4,46)); // Lösung: 6
```
Haben wir 9 Werte oder nicht. Wie kann es sein das überhapt eine Lösung erfolgt. Schon klar das alles int werte sind 
und man hier drauf schließen kann : 
	
	
	
	





```
public static int foo(int... x        ){ return 6;}
```
Aber warum ist das so ?

Vielen Dank nochmals


----------



## noobadix (19. Nov 2012)

Hi!



> Also wie ich jetzt verstanden habe, gibt das return eine Zahl bzw. einen Wert an.Dieser Wert beschreibt je nach Implementierung von welcher Methode die Rede ist.(Wenn ich es richtig verstanden habe.)



"einen Wert angeben" ist weit gefasst. Zunächst muss man klarstellen, dass es zwei Sorten von Methoden gibt, nämlich jene mit und solche ohne Rückgabewert. Der Rückgabewert wird mit "return" bestimmt.
Ob eine Methode einen Rückgabewert erzeugt, erkennt man daran, ob "void" oder ein Datentyp in der Methodendefinition steht, steht ein Datentyp da, MUSS IN JEDEM FALL ein Wert mit "return" zurückgegeben werden.
Hat eine Methode einen Rückgabewert, kann man sie an jede Stelle schreiben, an der man auch einen anderen, konkreten Wert desselben Datentyps schreiben könnte.


```
int machtNix(){ return 6;}
System.out.println(machtNix());
//hat den selben Effekt/die selbe Ausgabe wie
System.out.println(6);
```



> 1) Was ist der unterschied zwischen der foo()- und max() Methode ?



Welche max() Methode?!



> Aber warum ist das so ?



Von all den foo-Methoden ist jene, die beliebig viele int-Argumente aufnehmen kann, diejenige, welche den Rückgabewert Sechs hat. Alle anderen erwarten andere Datentypen und -mengen an Argumenten und werden also nicht aufgerufen, das macht z.B. unterschiedliche Konstruktoren möglich.

Gruß!


----------



## cgame (21. Nov 2012)

Danke noobadix für deine Antwort.
Jetzt versteh ich es besser echt Danke

Und sry das ich spät antworte. !!!!

Gruß 
Cgame


----------

