Hi Leute,
ich bereite mich zur Zeit auf mein OCA vor und habe bereits 3 Testexamen bestanden. Ich versuche meine Lücken zu füllen indem ich Testfragen wie die im Betreff genannte Frage zu lösen und falsche Antworten zu analysieren. Ich verstehe aber folgende Lösung nicht(also ich sage gleich ich wusste in diesem Exam nicht wie viele Antworten richtig sind, aber ich denke es tut jetzt erstmal nichts zur Sache) bitte kann mir jemand ganz genau erklären, warum Option E auch richtig ist.
[CODE lang="java" title="WHich lines in Tadpole giva a compoiler error?"]package animal;
public class Frog{
protected void ribbit{}
void jump{}
}
[/CODE]
[CODE lang="java" title="package other"]package other;
import animal.*;
public class Tadpole extends Frog{
public static void main(String[]args){
Tadpole t= new Tadpole();
t.ribbit();
t.jump();
Frog f = new Tadpole();
f.ribbit();
f.jump();
}
}[/CODE]
[CODE lang="java" title="Antwortmöglichkeiten"]
A: 5
B: 6
C: 7
D: 8
E: 9
F:10
[/CODE]
Um vielleicht besser mein Problem analysieren zu können : Ich verstehe nicht warum die Referenz Frog f das Ergebnis verändert. Methoden beziehen sich doch erstmal immer auf das Objekt solange sie nicht statisch oder privat sind.
Zeile 5 erzeugt ein neues Objekt Tadpole und teilt dieses Objekt der Referenz Tadpole zu. Zeile 6 ruft von diesem Objekt die Methode ribbit auf. Da Tadpole von Frog erbt, bekommt er also die Methode, da der Modifier das erlaubt und somit die Methode vererbt. Zeile 7 ruft die Methode jump auf. Diese wird nicht vererbt, da sie package private ist und somit unsichtbar für dieses Objekt ist. So jetzt geht es ins eingemachte. Wir haben in der Zeile 8 ein neues Objekt von Tadpole, dass aber durch Polymorphie an eine Referenz von Frog gebunden wird. Ok Regeln die mir dazu einfallen, ist, dass wenn eine Methode hidden ist, diese sich dann immer zur Referenz und nicht zum Objekt bezieht. Variablen beziehen sich immer auf die Referenz, sodass die Variable sich in dem Fall auf Frog bezieht... Cool was für eine Variable ist nämlich keine da. Also egal.... jetzt gehe ich in die Zeile die mir Kopfschmerzen bereitet, denn eigentlich wird hier die Methode ribbit aufgerufen. Sie ist eigentlich nicht hidden, den eigentlich sollte sie vererbt werden. Oder passiert hier was anderes, was ich gerade nirgends nachlesen kann. So in Zeile 10 sollte jump wieder einen Fehler werfen(ja tut es auch laut Lösung), da diese Methode default access ist und somit ganz streng die Methode nur im Package sichtbar ist. Ein Kumpel hat da mal gemeint es gibt irgendeine Ausnahme was evtl. auf diesen Fall zutreffen könnte, aber ich brauche hier einfach mal eine genaue Erklärung bitte=)
ich bereite mich zur Zeit auf mein OCA vor und habe bereits 3 Testexamen bestanden. Ich versuche meine Lücken zu füllen indem ich Testfragen wie die im Betreff genannte Frage zu lösen und falsche Antworten zu analysieren. Ich verstehe aber folgende Lösung nicht(also ich sage gleich ich wusste in diesem Exam nicht wie viele Antworten richtig sind, aber ich denke es tut jetzt erstmal nichts zur Sache) bitte kann mir jemand ganz genau erklären, warum Option E auch richtig ist.
[CODE lang="java" title="WHich lines in Tadpole giva a compoiler error?"]package animal;
public class Frog{
protected void ribbit{}
void jump{}
}
[/CODE]
[CODE lang="java" title="package other"]package other;
import animal.*;
public class Tadpole extends Frog{
public static void main(String[]args){
Tadpole t= new Tadpole();
t.ribbit();
t.jump();
Frog f = new Tadpole();
f.ribbit();
f.jump();
}
}[/CODE]
[CODE lang="java" title="Antwortmöglichkeiten"]
A: 5
B: 6
C: 7
D: 8
E: 9
F:10
[/CODE]
Um vielleicht besser mein Problem analysieren zu können : Ich verstehe nicht warum die Referenz Frog f das Ergebnis verändert. Methoden beziehen sich doch erstmal immer auf das Objekt solange sie nicht statisch oder privat sind.
Zeile 5 erzeugt ein neues Objekt Tadpole und teilt dieses Objekt der Referenz Tadpole zu. Zeile 6 ruft von diesem Objekt die Methode ribbit auf. Da Tadpole von Frog erbt, bekommt er also die Methode, da der Modifier das erlaubt und somit die Methode vererbt. Zeile 7 ruft die Methode jump auf. Diese wird nicht vererbt, da sie package private ist und somit unsichtbar für dieses Objekt ist. So jetzt geht es ins eingemachte. Wir haben in der Zeile 8 ein neues Objekt von Tadpole, dass aber durch Polymorphie an eine Referenz von Frog gebunden wird. Ok Regeln die mir dazu einfallen, ist, dass wenn eine Methode hidden ist, diese sich dann immer zur Referenz und nicht zum Objekt bezieht. Variablen beziehen sich immer auf die Referenz, sodass die Variable sich in dem Fall auf Frog bezieht... Cool was für eine Variable ist nämlich keine da. Also egal.... jetzt gehe ich in die Zeile die mir Kopfschmerzen bereitet, denn eigentlich wird hier die Methode ribbit aufgerufen. Sie ist eigentlich nicht hidden, den eigentlich sollte sie vererbt werden. Oder passiert hier was anderes, was ich gerade nirgends nachlesen kann. So in Zeile 10 sollte jump wieder einen Fehler werfen(ja tut es auch laut Lösung), da diese Methode default access ist und somit ganz streng die Methode nur im Package sichtbar ist. Ein Kumpel hat da mal gemeint es gibt irgendeine Ausnahme was evtl. auf diesen Fall zutreffen könnte, aber ich brauche hier einfach mal eine genaue Erklärung bitte=)
Zuletzt bearbeitet: