Programmanalyse

Yoshi86

Mitglied
Guten Tag allerseits :),

Ich schreibe morgen eine Präsenzübung und bin grad an einer Aufgabe hängen geblieben. DIe Lösung hab ich schon aber verstehe etwas nicht. Dazu folgender Code:

Java:
public class A {
		public static double x = 1;
		public A(){
			this(4);
		}
		public A(double x){
			A.x += x;
		}
		public void f(double x){
			x += 2*x;
		}
}

public class B extends A {
		public int y = 3;
		public B(int x){
			super();
			y++;
		}
		public void f(int x){
			A.x += x;
		}
		public void f(double x){
			A.x -= x;
			y--;
		}
}

public class M {
	public static void main(String[] args) {
		A a = new A(A.x);
		System.out.println(a.x);            // OUT: 2.0
		a.f(10);
		System.out.println(a.x);            // OUT: 2.0
		B b = new B(10);
		System.out.println(b.x+" "+b.y); // OUT: 6.0  und 4
		b.f(10);
		System.out.println(b.x);            // OUT: 16.0
		a = b;
		a.f(1.0);
		System.out.println(a.x+" "+b.y); // OUT 15.0 und 3
		a.f(10);
		System.out.println(a.x);            // OUT 5.0   diese ausgabe verstehe ich nicht?!
	}

}

so wie ich im Code schon kommentiert habe verstehe ich die letzte Aussage 5.0 nicht. Ich hätte hier eher auf public void f(int x) der Klasse B zugregriffen da ja der Parameter von a.f(10) ein int ist und somit 25.0 erhalten... Wieso wird hier auf public void f(double x) der Klasse B zugregriffen? Danke schonmal für die Antwort :).
 

HimBromBeere

Top Contributor
es wird nicht die Funktion f aus der Klasse B aufgerufen. Die Zahl 10 wird in eine double gecastet (implicit cast) und dann mit 2 multipliziert. Dieser Wert wird auf das aktuelle A.x draufaddiert, du solltest 15 erhalten, nicht 25...
 

Yoshi86

Mitglied
Nein die Ausgabe ist garantiert 5.0. Ich hab das Programm zum überprüfen ausgeführt und in der Lösung ist auch 5.0(vorher war a.x = 15.0) und y wurde dekrementiert. Das heisst es kann nur auf die Methode f(double x) von Klasse B zugegriffen worden sein. Ausserdem achte mal auf das a = b... hier wird doch a auf b referenziert. Also kanns nur Klasse B sein.
 

Final_Striker

Top Contributor
o wie ich im Code schon kommentiert habe verstehe ich die letzte Aussage 5.0 nicht. Ich hätte hier eher auf public void f(int x) der Klasse B zugregriffen da ja der Parameter von a.f(10) ein int ist und somit 25.0 erhalten... Wieso wird hier auf public void f(double x) der Klasse B zugregriffen?

Java:
       public void f(double x){
            A.x -= x;
            y--;
        }

15-10 ist ergibt 5.
 

Yoshi86

Mitglied
ja, dass er diese methode benutzt weiss ich:). Aber wieso ausgerechnet diese? der Parameter ist doch ein int bei a.f(10). wieso wird dann die methode f(double..) und nicht f(int...) benutzt? normalerweise wird doch nur ein impliziter cast vorgenommen falls es keine entsprechende methode gibt aber hier ist eine methode f mit int :). Deshalb verstehe ich das nicht,
 

Nani17

Mitglied
Hätte exakt die gleiche Frage, habe das erst soeben gesehen. Gibt es bereits für die Frage weshalb man hierbei die f Methode mit dem double verwendet und nicht die f Methode mit dem int eine Antwort?
Lg
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben