Übungsfrage Überschreibung/Überladung von Methoden

Firewater

Grünschnabel
Hi Leute,

ich habe eine Informatik-Übung, bei der ich mal Hilfe bräuchte, hier ist die Aufgabe:
------------------------------------------------------------------------------------------------------------------

a) Gegeben seien folgende Methoden, wobei B Unterklasse von A und C Unterklasse von B ist:

int add(long a, int b) {...} // Methode 1
int add(double a, float b) {...} // Methode 2
void print(B b, C c) {...} // Methode 3
void print(A a, B b) {...} // Methode 4

Welche Methode wird statisch an folgende Aufrufe gebunden, bzw. was passiert bei folgenden Aufrufen
(begründen)?

A a = new A();
B b = new B();
C c = new C();
add(1.0, 2.0); // Aufruf 1
add(2.0, 1.0F); // Aufruf 2
add(1, 2); // Aufruf 3
add(2, 1L); // Aufruf 4
print(c, c); // Aufruf 5
print(a, c); // Aufruf 6
print(c, b); // Aufruf 7
print(b, a); // Aufruf 8

------------------------------------------------------------------------------------------------------------------

aalso gut ich hab die Aufgabe jetzt mal so interpretiert, dass die Methoden in jeder Klasse stehen!? ich weiß, dass die Klasse C aktuell ist, weil sie ja als letztes Objekt aufgerufen wird und auch die unterste Unterklasse ist sozusagen.
also kann man auf jeden Fall Objekte vom Typ C aufrufen.
weiterhin sind das ja überladene Methoden, also der Compiler (oder wer auch immer) sucht sich die passende Methode aus, je nachdem, welcher wert eingegeben wird

ich habe vor Allem folgendes problem: ich weiß nicht, ob man die Objekte a und b aufrufen kann?

mein Lösungsvorschlagwäre:

aufruf 1: hier handelt es sich um kommazahlen, also methode 2
aufruf 2: auf jeden Fall methode 2 wegen dem F
aufruf 3: methode 1
aufruf 4: fehler**** der zweite typ kann ja kein Long sein?

aufruf 5, 6,7,8: hier weiß ich nicht, kann man überhaupt auf a, b und c zugreifen? wenn ja, wie ist das mit der reihenfolge? die wird ja gar nicht eingehalten... also entweder gehen die Aufrufe 7 und 8 und vielleicht sogar 5, weil c ja einmal vorkommt, oder die gehen alle gar nicht, weil die reihenfolge nicht stimmt****

wär nett, wenn ihr mir eure Intelligenz borgen könntet ;)

@mods: falls das in irgendein unterforum sollte, sorry!


danke
Fire
 
Naja, also das mit dem Unterforum ist eher das geringere Problem, kirtischer ist es eher damit: Thema Übungszettel

Daher hast du bisher vermutlich auch noch keine Antwort bekommen udn wirst auch keine Lösungen bekommen.
Aber Hilfestellungen sind denke ich dennoch erwünscht. Ein Tipp den ich dir geben kann ist folgender:

Wenn B von A erbt, dann ist jedes Objekt der Klasse B auch ein Objekt der Klasse A, allerdings nicht umgekehrt. Oder Realitätsnäher könnten wir auch A durch "Buch" ersetzen und B durch "Sachbuch". In diesem Fall würde "Sachbuch" natürlich von "Buch" erben.
Hätten wir also z.B. eine Methode lesen(Buch b), dann würde folgender Aufruf ohne Problem funktionieren:

Java:
Sachbuch sb = new Sachbuch();
lesen(sb);

Oder wieder übertragen auf A und B und einer Methode print(A a), wobei B von A erbt:

Java:
B b = new B();
print(b)
 
Hallo Technoblade,

danke für deine Antwort. Den Hilfetext hab ich gelesen, aber ich hab ja eigentlich von niemandem verlangt, mir die Aufgaben zu machen...

also das mit der Vererbung und quasi Spezialisierung hab ich schon verstanden.

das ich auf (in meinem fall) ein Objekt von c zugreifen kann ist klar, weil C die "spezialisierteste" klasse ist, aber kann ich auch auf Objekte von a oder b zugreifen? zum Beispiel der Befehl "super" macht doch sowas, wenn der dann in der methode vorkommen sollte...?

und weiterhin die frage, ist die reihenfolge wichtig? kann ich wenn vorher da steht print (B b, C c) jetzt auch die methode mit print (c, b) starten?

danke
Fire
 
Ja, die Reihenfolge in der du Parameter übergibst ist relevant. Zudem ist es so, dass c ein B ist, b jedoch nicht unbedingt ein C sein muss. Daher wird dir dein Compiler einen Aufruf print(c, b) nicht durchgehen lassen. Während es bei c noch gut geht, da ja c ein B ist hast du Probleme mit dem zweiten Parameter. Dieser müsste ein C sein, allerdings ist b kein C.
 
Hallo,
@Firewater
es gibt aber eins was ich noch bemängeln muss. ;-)
Achte doch bitte auf deine Groß- und Kleinschreibung.

Gruß

Sascha
 
Zurück