quiz Aufgabe 2 c

gast
Gast

quiz Aufgabe 2 c

Beitrag von gast » 7. Mär 2014 17:26

Ich bin beim lösen auf etwas gestoßen, von dem ich dachte, es sei ein Fehler, es ist aber nicht in der Lösung aufgeführt.
Und zwar:

Z.21: hier greift die Methode auf die Methode getX() von A zu, diese ist aber Private und damit wäre doch B gar nicht dazu berechtigt, oder überseh ich was?

Vielen DAnk im Voraus!

TobiTobske
Mausschubser
Mausschubser
Beiträge: 58
Registriert: 15. Jan 2014 20:50

Re: quiz Aufgabe 2 c

Beitrag von TobiTobske » 8. Mär 2014 15:43

Da Klasse B aber Klasse A erweitert (siehe Zeile 17), also B von A erbt, erbt B auch die Methode getX() und kann dementsprechend auch darauf zugreifen.
Würde B nicht von A erben, dann ginge das nicht, weil die Methode private ist.

user379
Erstie
Erstie
Beiträge: 13
Registriert: 3. Jan 2014 11:26

Re: quiz Aufgabe 2 c

Beitrag von user379 » 8. Mär 2014 15:53

Hallo,

mir ist das gerad auch aufgefallen. Meines Erachtens hast du (also der Ersteller des Themas) recht. Auf Methoden, die private sind, kann doch eigentlich nicht von einer Unterklasse zugegriffen werden.
Ich habs mal mit den in der Musterlösung genannten Korrekturen in BlueJ eingegeben. Beim Kompilieren der Klasse B kam dann auch folgende Fehlermeldung: getX() has private access in A

P. S.: Ich bin kein Experte.

gast
Gast

Re: quiz Aufgabe 2 c

Beitrag von gast » 8. Mär 2014 17:10

TobiTobske hat geschrieben:Da Klasse B aber Klasse A erweitert (siehe Zeile 17), also B von A erbt, erbt B auch die Methode getX() und kann dementsprechend auch darauf zugreifen.
Würde B nicht von A erben, dann ginge das nicht, weil die Methode private ist.
@TobiTobske
Wenn ich das richtig verstehe, wird die Methode vererbt, aber die vererbte Methode kann doch nur auf das Attribut von B zugreifen
und VOR ALLEM: wird mit SUPER definitiv versucht auf die Methode von A zuzugreifen und nicht auf die vererbte, oder?

Code: Alles auswählen

public void someAction () {
    System.out.println(x = x + super.getX());
Ich lass mich gerne eines Besseren belehren :)

TobiTobske
Mausschubser
Mausschubser
Beiträge: 58
Registriert: 15. Jan 2014 20:50

Re: quiz Aufgabe 2 c

Beitrag von TobiTobske » 8. Mär 2014 17:44

Mmmh, jetzt bin ich mir auch nicht mehr so sicher.
@gast: Stimmt, es kann sein, dass das super davor wichtig ist, weil somit ja die Methode aus A versucht wird aufzurufen...
Wäre das super nicht da, glaube ich, würde es gehen...

Ich tipps mal schnell in BlueJ und schau was passiert, jetzt bin ich nämlich verwirrt... :oops:

user379
Erstie
Erstie
Beiträge: 13
Registriert: 3. Jan 2014 11:26

Re: quiz Aufgabe 2 c

Beitrag von user379 » 8. Mär 2014 18:03

Ich habs schon in BlueJ eingetippt und hätte ebenfalls erwartet, dass es ohne super klappt. Aber wenn einfach nur getX() verwendet wird, dann erscheint die Fehlermeldung "cannot find symbol". Die Vererbung von Methoden scheint nur mit dem Modifier public (wahrscheinlich auch protected) gut zu funktionieren. Hat mich nun überrascht.

Ein Eingabefehler scheint nicht vorzuliegen, da alles wie erwartet funktioniert, wenn ich getX() in Klasse A auf public setze.

TobiTobske
Mausschubser
Mausschubser
Beiträge: 58
Registriert: 15. Jan 2014 20:50

Re: quiz Aufgabe 2 c

Beitrag von TobiTobske » 8. Mär 2014 18:04

So ich habe das nochmal in BlueJ eingetippt.

Quintessenz: Private Methoden können nicht vererbt werden. Ziemlich peinlich, dass mir das entfallen war... :oops:

Das heißt, egal ob super davorsteht oder nicht, B hat die Methode einfach nicht und deswegen kann sie nicht aufgerufen werden. Das ginge dann nur wenn sie in A als public oder protected deklariert wurde.

Also vergesst alles, was ich vorher gesagt habe.

Nochmal zum Topicersteller: Ja, du hast damit also recht. In der Aufgabe wird aber auch nach etwaigen Syntaxfehlern gefragt, und das hier wäre ja einer.

mdk
Gast

Re: quiz Aufgabe 2 c

Beitrag von mdk » 8. Mär 2014 18:34

Also das scheint mir alles irgendwie nicht plausibel zu sein...

Auf jeden Fall ist get() in Klasse A private, d.h. Klasse B, die ja von A erbt, hat diese Methode definitiv nicht. Dennoch würde ich behaupten, dass man in Klasse B über super.getX() die Methode der Mutterklasse, also A, aufrufen kann. Bin kein Experte, aber ich glaube das geht so.

Vielleicht weiß ja ein Tuturo was genaueres dazu :)

gast
Gast

Re: quiz Aufgabe 2 c

Beitrag von gast » 10. Mär 2014 13:40

Im Video zur Vererbung wird auch gesagt dass Methoden die private sind nicht vererbt werden. Sie können auch nicht mit super aufgerufen werden.
Aber in der Musterlösung wird der Fehler nicht aufgeführt, deshalb bin ich auch etwas verwirrt und hoffe ein Tutor hat eine endgültige Lösung.

Gast1
Gast

quiz Aufgabe 2c

Beitrag von Gast1 » 11. Mär 2014 02:49

Ich hätte eine Frage zu folgendem Code aus Aufgabe 2c:

Code: Alles auswählen

class A {
	int x = 3 ;
	private int getX ( ) {
	return x ;
}
public quadrat ( ) {
	return x*x ;
	}
}
class B extends A {
	double z = 2 2 . 0 ,
	int x = 3 ;
	public int sum( ) {
	return super.getX ( ) + x ;
}
public void func ( ) {
	return z ;
}
}
Im Vorlesungsvideo zur Vererbung wird gesagt, dass eine abgeleitete Klasse nicht auf private Attribute der Oberklasse zugreifen darf. In diesem Fall jedoch greift die abgeleitete Klasse B auf eine private Methode (nämlich private int getX ()) der Oberklasse zu und dies wird in der Lösung nicht als semantischer Fehler gewertet. Liegt das an dem ,,super." vor dem getX, wobei ich nicht glaube das ein super. den private Modifikator umgehen bzw bedeutungslos machen kann. Wo ist mein Denkfehler? Würde mich um eine Antwort freuen.

Gast1
Gast

Re: quiz Aufgabe 2c

Beitrag von Gast1 » 11. Mär 2014 12:25

Hat niemand eine Idee? :/


Gast1
Gast

Re: quiz Aufgabe 2c

Beitrag von Gast1 » 11. Mär 2014 13:08

gast hat geschrieben:/viewtopic.php?f=261&t=30121
Danke, hatte den Thread nicht gesehen :) Würde mich auch freuen wenn sich ein Tutor dazu äußern könnte, denn da scheint sich ein Fehler in die Musterlösung eingeschlichen zu haben.

m_flaig
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 272
Registriert: 27. Sep 2009 14:02

Re: quiz Aufgabe 2 c

Beitrag von m_flaig » 11. Mär 2014 13:21

Hallo,

nicht wundern, ich habe die zwei Topics mal zusammengeführt.

Im Prinzip wurde nun ja alles richtig erläutert: Eine private Methode wird nicht vererbt.

Gibt es nun noch offene Fragen dazu? =)

Viele Grüße,
Maxi Flaig

rstyler
Gast

Re: quiz Aufgabe 2 c

Beitrag von rstyler » 11. Mär 2014 13:24

Ihr habt es alle richtig erkannt, aber zur Beruhigung noch einmal die Bestätigung:
Ja, private Methoden werden nicht vererbt und es ist als Fehler zu markieren.

Laut der Definition aus der Vorlesung
Syntaxfehler findet und moniert der Compiler. Semantikfehler findet der Compiler nicht, sondern sie wirken sich zur Laufzeit durch Programmabbruch aus.
ist es ein Syntax-Fehler.

Antworten

Zurück zu „Archiv“