Vererbung von Attributen und Methoden, Verständnisproblem

Status
Nicht offen für weitere Antworten.
T

ThomasKo

Gast
Hallo,

ich habe ein ein Verständnisproblem bzgl. der Vererbung von Attributen und Methoden in folgendem kleinen Beispiel:

Code:
class A
{
	public int attr = 1;
	
	public void ausgabe()
	{
		System.out.println("Ausgabe Klasse A");
	}		
}

class B extends A
{
	public int attr = 2;
	
	public void ausgabe()
	{
		System.out.println("Ausgabe Klasse B");
	}
	
	public static void main(String args[])
	{
		A meinB = new B();
		
		System.out.println(meinB.attr);
		meinB.ausgabe();
	}				
}
AUSGABE:

1
Ausgabe Klasse B

###########################################################

Nun hoffe ich, dass ihr mir bei folgenden Fragen weiterhelfen könnt, mein Tutor an der FH konnte es nämlich leider auf die Schnelle nicht ;)

Das Programm gibt korrekt "Ausgabe Klase B" aus, da die Methode ausgabe in der abgeleiteten Klasse überschrieben wird. Warum aber wird der Wert von attr aus der Oberklasse ausgegeben, obwohl die Variable auch überschrieben wird ? Ich habe eigentlich in der Vorlesung gelernt, dass Attributwerte überhaupt nicht vererbt werden sollten...

Wenn ich
A meinB = new B();
in
B meinB = new B();
ändere ist die Ausgabe für mich verständlicher, nämlich:

2
Ausgabe B

wie ich es eigentlich auch im eigentlichen Beispiel erwartet hatte. Da B von A abgeleitet ist sollte es doch eigentlich problemlos möglich sein ein Objekt von B in einer Variable vom Typ A zu speichern, oder nicht ?

Bin für Hilfe dankbar ;)

MfG

Thomas
 

foobar

Top Contributor
ch habe eigentlich in der Vorlesung gelernt, dass Attributwerte überhaupt nicht vererbt werden sollten...
Dann hast du wohl was falsch verstanden.

wie ich es eigentlich auch im eigentlichen Beispiel erwartet hatte. Da B von A abgeleitet ist sollte es doch eigentlich problemlos möglich sein ein Objekt von B in einer Variable vom Typ A zu speichern, oder nicht ?
Jepp, aber warum probierst du es nicht einfach aus.
 
G

Gast

Gast
Hi Thomas,

wie du schon sagtest, man sollte Attribute nicht nochmal in einer abgeleiteten Klasse redefinieren. Ist trotzdem ein komisches Verhalten, das ich leider auch nicht erkären kann. Ich habe aber ein bisschen herumgespielt.

1. Versuch: beide Variablen als private deklariert und in Klasse A getter und setter eingeführt.

Code:
public class A {
  public int getAttr() {
    return attr;
  }

  public void setAttr(int attr) {
    this.attr = attr;
  }

  private int attr = 1;

  public void ausgabe()
  {
     System.out.println("Ausgabe Klasse A");
  }
}

Ergebnis:

1
Ausgabe Klasse B


2. Versuch: Danach die getter- und setter-Methoden in Klasse B überschrieben.

Code:
public class B extends A {
  private int attr = 2;

  public int getAttr() {
    return attr;
  }

  public void setAttr(int attr) {
    this.attr = attr;
  }

  public void ausgabe()
  {
     System.out.println("Ausgabe Klasse B");
  }

  public static void main(String args[])
  {
     A meinB = new B();

     System.out.println(meinB.getAttr());
     meinB.ausgabe();
  }
}

Ergebnis:

2
Ausgabe Klasse B


Warum es dann plötzlich geht keine Ahnung.

Gruß

Wolfgang
 
G

Guest

Gast
foobar hat gesagt.:
wie ich es eigentlich auch im eigentlichen Beispiel erwartet hatte. Da B von A abgeleitet ist sollte es doch eigentlich problemlos möglich sein ein Objekt von B in einer Variable vom Typ A zu speichern, oder nicht ?
Jepp, aber warum probierst du es nicht einfach aus.

ich habe es natürlich vorher ausprobiert, und das Speichern ist ja auch möglich.Das "problemlos" bezog sich auf das mir nicht erklärliche Verhalten.
 
T

ThomasKo

Gast
Danke noch einmal für die bisherigen Antworten!

Was die Vererbung von Variablenwerten anging lag ich falsch, da bin ich mir mitlerweile sehr sicher ;)

Was die Problematik angeht bin ich nun auch ein ganzes Stück weiter und für diejenigen die es interessiert hier ein Zitat von einer Homepage der Uni-Köln:

5 Verdecken von Attributen
Man vermeide, in abgeleiteten Klassen neu eingeführte Attribute mit solchen Namen zu belegen, die bereits in der Oberklasse vorhanden sind und damit per Vererbung auch in der abgeleiteten Klasse vorhanden sind.
Technisch ist das aber möglich. In Methoden der abgeleiteten Klasse verdeckt dann das neue Attribut das ererbte Attribut, man greift stets auf das Attribut der abgeleiteten Klasse zu.
Außerhalb der abgeleiteten Klasse kann es beim Attributzugriff durchaus dazu kommen, daß man das Attribut der Basisklasse erwischt! Der Attributzugriff wird aus Effizienzgründen in Java und C++ nämlich nicht so aufwendig implementiert wie der Methodenzugriff. Es wird einfach nur der statische Typ der Referenz genommen, und das Attribut aus der dem statischen Type entsprechenden Klasse..
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
F Vererbung von Attributen zwischen zwei Klassen Java Basics - Anfänger-Themen 6
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
L Java- Vererbung Java Basics - Anfänger-Themen 4
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 12
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 1
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
M Vererbung Java Basics - Anfänger-Themen 6
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Java Basics - Anfänger-Themen 7
D Vererbung Java Basics - Anfänger-Themen 3
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
H Datenkapselung, Vererbung und UML Java Basics - Anfänger-Themen 16
districon Super-Stichwort/ Vererbung Java Basics - Anfänger-Themen 3
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
1 Vererbung Klassenattribute Java Basics - Anfänger-Themen 9
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
N Thema Vererbung Java Basics - Anfänger-Themen 31
A Vererbung Vererbung Übung Java Basics - Anfänger-Themen 5
B Vererbung - Sichtbarkeitsmodifikation - protected Java Basics - Anfänger-Themen 10
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
G Java Vererbung Java Basics - Anfänger-Themen 8
Y Vererbung Konto - Anfangsprobleme Java Basics - Anfänger-Themen 7
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
M Vererbung mit Enums Java Basics - Anfänger-Themen 8
Kirby.exe Vererbung im Detail erklärt? Java Basics - Anfänger-Themen 9
N Modellierung, vererbung, Java Basics - Anfänger-Themen 163
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung im Computerspiel Java Basics - Anfänger-Themen 7
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
I Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
V Vererbung Java Basics - Anfänger-Themen 2
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
J Vererbung Java Basics - Anfänger-Themen 3
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
O Umgang mit Vererbung verstehen Java Basics - Anfänger-Themen 4
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
O Vererbung änderung des Konstruktors Java Basics - Anfänger-Themen 8
L Vererbung Java Basics - Anfänger-Themen 5
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
A Objekterstellung bei der Vererbung Java Basics - Anfänger-Themen 7
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
S Vererbung Java mehrfach Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
H Vererbung mit private instanzvariablen Java Basics - Anfänger-Themen 9
S Vererbung Funktionsweise Code zur Vererbung Java Basics - Anfänger-Themen 1
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Generizität und Vererbung Java Basics - Anfänger-Themen 4
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
K Vererbung Octagon von Circle Java Basics - Anfänger-Themen 0
B Hilfe bei Vererbung Java Basics - Anfänger-Themen 2
D Vererbung Frage zum Klassenaufbau mit Vererbung Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 1
F Vererbung in zwei Richtungen? Java Basics - Anfänger-Themen 14
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
O Vererbung Java Basics - Anfänger-Themen 5
MiMa Vererbung Theorie OK, Praxis ?? Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
C Vererbung - Ausgaben bestimmen Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 10
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
J Kleinere Frage zur Vererbung/Objekterzeugung Java Basics - Anfänger-Themen 2
G Vererbung Java Basics - Anfänger-Themen 12
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
J Vererbung Vererbung von Methoden Java Basics - Anfänger-Themen 6
B Vererbung Java Basics - Anfänger-Themen 12
K Vererbung (super) Java Basics - Anfänger-Themen 2
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
C Vererbung Java Basics - Anfänger-Themen 4
L Vererbung Java Basics - Anfänger-Themen 3
J Klassenorganisation | Vererbung Java Basics - Anfänger-Themen 1
B Vererbung Vererbung Java Basics - Anfänger-Themen 2
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
A Benötige Hilfe bei Vererbung Java Basics - Anfänger-Themen 1
M Anfängerprobleme mit Vererbung Java Basics - Anfänger-Themen 27
J Vererbung Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben