Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Ausgabe bei Ausführung » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (2): « vorherige 1 [2] Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Ausgabe bei Ausführung
Beiträge zu diesem Thema Autor Datum
« Vorherige Seite
 RE: Ausgabe bei Ausführung neuling96 28.12.2014 13:14
 RE: Ausgabe bei Ausführung eulerscheZahl 28.12.2014 13:21
 RE: Ausgabe bei Ausführung neuling96 29.12.2014 04:21
 RE: Ausgabe bei Ausführung eulerscheZahl 29.12.2014 07:56
 RE: Ausgabe bei Ausführung neuling96 08.01.2015 06:09
 RE: Ausgabe bei Ausführung eulerscheZahl 08.01.2015 06:35
 RE: Ausgabe bei Ausführung neuling96 08.01.2015 06:42
 RE: Ausgabe bei Ausführung eulerscheZahl 08.01.2015 06:45
 RE: Ausgabe bei Ausführung neuling96 08.01.2015 06:48
 RE: Ausgabe bei Ausführung eulerscheZahl 08.01.2015 13:51
 RE: Ausgabe bei Ausführung eulerscheZahl 24.01.2015 09:06

Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
neuling96
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

o1.add(o2)

das problem was ich habe ist folgendes
01 ist von A und damit o1.add(o2) auf etwas zugegriffen, was eig nicht in der klasse A gibt


System.out.println(o2.add(o2)); //0
das habe ich verstanden

System.out.println(print(o3));

die main nimmt es als 03 als A auf

also wird
public static String print(A a){
return "Parameter A: " + a.toString();
}
aus geführt?

bei a.toString wird aber aber auf B klasse zugegriffen


also

Paramerter A: ich bin ein B
28.12.2014 13:14
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

[qoute]o1 ist von A und damit o1.add(o2) auf etwas zugegriffen, was eig nicht in der klasse A gibt [/quote]
aber o2 ist ja als B nichts anderes als ein abgeleitetes A. Daher kann es verwendet werden (wenn es in A eine Funktion add(B) geben würde, würde die genommen werden. Gibt es aber nicht, also die zweitbeste Lösung, die ein A erwartet.

toString() gibt es für 2 Klassen (eigentlich für 3, auch für Object, von dem A erbt). o3 ist von Typ B, ruft also B.toString() auf.
Hätte B noch eine Funktion, die A nicht besitzt, könntest du sie in der main nicht aufrufen, da o3 dort als A deklariert ist.

__________________
Syntax Highlighting fürs Board (Link)
28.12.2014 13:21 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
neuling96
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

wie nimmt das allg Prinzip das hinter diesen Prozess steht?
29.12.2014 04:21
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Das nennt sich Polymorphie.

__________________
Syntax Highlighting fürs Board (Link)
29.12.2014 07:56 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
neuling96
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

"Bei Attributen tritt dabei der Effekt der
Versteckens
auf: Das Attribut der
Vaterklasse ist in der abgeleiteten Klasse nicht mehr sichtbar"

genau das haben wir hier vorliegen, auf das Attribute this.a ist nicht mehr sichtbar in der Vaterklasse.

und deshalb ist this.a nicht mehr sichtbar in B ??
08.01.2015 06:09
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

zum Verstecken: ja, genau das ist der Fall. Aber this.a ist weiterhin vorhanden - nur einen ein anderes a. Nämlich das der Kindklasse.

Zitat:
public class A {
private int a;
public A(){ // ohne in klammern int a
this.a = a;
}

wenn kein a an die Funktion übergeben wird, dann ist this.a nur eine andere Schreibweise für a. Und da der Initialwert (und somit aktuelle Wert) 0 ist, setzt du ihn erneut zu 0.


super(a) ruft den Konstruktor der Elternklasse auf. Das ist nicht verpflichtend, kommt eben darauf an, welches Verhalten du erzielen willst.

__________________
Syntax Highlighting fürs Board (Link)
08.01.2015 06:35 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
neuling96
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Original von eulerscheZahl
zum Verstecken: ja, genau das ist der Fall. Aber this.a ist weiterhin vorhanden - nur einen ein anderes a. Nämlich das der Kindklasse.



und der einzige zugriff this.a erfolgt durch den befehl super, richtig?
08.01.2015 06:42
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ja, das ursprüngliche a kriegst du nur über super.a - oder besser gesagt über super.getA(), da a ja private ist.

__________________
Syntax Highlighting fürs Board (Link)
08.01.2015 06:45 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
neuling96
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

noch eins
das in der klasse A def funktion
public int getA(){
return this.a;

kann nun jede beliebig klasse zugriffen werden mit super.getA()?
08.01.2015 06:48
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Wenn Klasse B von A erbt, kannst du mit super.getA() darauf zugreifen.
Wenn Klasse C von B erbt und B und C ebenfalls ein getA() haben, wirst du an A.getA() nicht mehr herankommen. Ein super.super gibt es nicht.

Außerhalb der Klasse geht das auch nicht: B b = new B(2); b.super.getA(); geht also auch nicht.

__________________
Syntax Highlighting fürs Board (Link)
08.01.2015 13:51 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Der Compiler stellt zwar fest, ob A die Methode n() hat, weshalb sich das Programm auch nicht starten lässt. Aber mit Laufzeit hat das nichts zu tun (das ist auch nicht Aufgabe des Compilers, sonst könntest du dir Laufzeitfehler ja auch schon beim Compilieren anzeigen lassen).

__________________
Syntax Highlighting fürs Board (Link)
24.01.2015 09:06 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Seiten (2): « vorherige 1 [2] Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Ausgabe bei Ausführung