Samstag, 30. Dezember 2006

Java

Bug in der Vererbung von Java

Irgendwie stellt sich gerade mein Wissen über die Vererbungslehre in Objekt Orientierten Sprachen ein wenig auf den Kopf, oder ist das ein Bug in Java?

Ich dachte eigentlich immer, wenn man ein Attribut einer Klasse in einer Kindklasse ändert, dieser Wert auch genommen wird, wenn eine Methode der Elternklasse auf das Attribut zugreift. Meine Javaversion, die ich verwende ist Java 1.6 SE.

Der Folgender Code sollte Veranschaulichen, was ich genau meine:

Die Klasse Main

Download Code!

  1.  
  2. public class Main {
  3.  
  4.     public Main() {
  5.     }
  6.    
  7.     public static void main(String[] args) {      
  8.         Mercedes auto = new Mercedes();
  9.         auto.beschleunige();
  10.     }  
  11. }
  12.  
Die Klasse Auto

Download Code!

  1.  
  2. public class Auto {
  3.    
  4.     protected int maximaleGeschwindigkeit = 0;
  5.    
  6.     public Auto() {
  7.     }
  8.    
  9.     public void beschleunige() {
  10.         System.out.println("Beschleunige bis: " + maximaleGeschwindigkeit);
  11.     }
  12. }
  13.  
  14.  
Die Klasse Mercedes

Download Code!

  1.  
  2. public class Mercedes extends Auto {
  3.     // Hier überschreibe ich den Wert!
  4.     protected int maximaleGeschwindigkeit  = 300;
  5.  
  6.     public Mercedes() {
  7.         System.out.println("Ich fahre maximal: " + maximaleGeschwindigkeit);
  8.     }
  9.    
  10. }
  11.  
  12.  

Als Ausgabe erhalte ich folgendes:

Ich fahre maximal: 300
Beschleunige bis: 0

Ich habe eigentlich erwartet, dass die Ausgabe so lautet:

Ich fahre maximal: 300
Beschleunige bis: 300

Ich habe doch den Attributwert maximaleGeschwindigkeit auf 300 in der Klasse Mercedes geändert. Warum nimmt Java aber den Wert der Elternklasse Auto? Momentan macht mich das ein wenig ratlos.

Bewertung: keine, 0 Stimme(n) 393 Klicks
Java
Von Mr.Foo in Java am 30.12.06@23:01 Uhr

Trackbacks
Trackback für spezifische URI dieses Eintrags

Keine Trackbacks

8 Kommentare
Ansicht der Kommentare: (Linear | Verschachtelt)

Schabi - #1 - 18.01.2007 11:55 - (Antwort)

Du deklarierst in der Unterklasse ein neues Attribut maximaleGeschwindigkeit, dass das Attribut der Oberklasse versteckt - die Oberklasse kennt aber nur ihr eigenes.

Versuch mal folgende:

Download Code!

  1.  
  2. public class Toyota extends Auto {
  3.     public Toyota() {
  4.         maximaleGeschwindigkeit  = 300;
  5.         System.out.println("Ich fahre maximal: " + maximaleGeschwindigkeit);
  6.     }    
  7. }
  8.  

Mr. Foo - #1.1 - 22.01.2007 17:25 - (Antwort)

Hi Schabi,

da hast du Recht. Danke für diese präzise Antwort. Dann ist das wohl kein Bug in Java, sondern so gewollt.

Ich nehme an, du meinst mit Forensoftware die Blogsoftware und die Formatierung mit BR-Tags. Das liegt daran, das hier zwei Module kollidieren. Eines für den Quelltext und das andere, welches Zeilenumbrüche in BR-Tag umwandelt.

Schabi - #1.1.1 - 22.01.2007 17:38 - (Antwort)

Genau, Java verfolgt hier einen anderen Ansatz. C++ und ein paar andere Sprachen haben übrigens denselben.

Mr. Foo - #1.1.1.1 - 22.01.2007 20:29 - (Antwort)

C++ benutze ich nur ein wenig während der Ausbildung. PHP5 behandelt das wiederrum anderes. Leider :/ - denn bei genauerer Betrachtung, ergibt der Ansatz von Java mehr Sinn.

Schabi - #2 - 18.01.2007 12:10 - (Antwort)

Anmerkung noch: Gute IDEs wie Eclipse bringen an der Stelle eine Warnung, wie "shadowed member" oder so.

Und noch eine Anmerkung: Die Foren-Software ist seltsam.

Mr. Foo - #2.1 - 22.01.2007 17:27 - (Antwort)

Dann ist NetBeans schlecht :-) - diese IDE benutze ich, wenn ich Programme in Java schreibe.

Schabi - #3 - 22.01.2007 17:36 - (Antwort)

Keine Ahnung - die nutze ich nicht.
Vielleicht kann man die Warnung auch optional einschalten.

Mr. Foo - #3.1 - 22.01.2007 20:30 - (Antwort)

Hmm, gute Idee, das müsste ich prüfen. Auf den ersten Blick aber nicht.


Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Sie können [geshi lang=LANG][/lang] Tags verwenden um Quellcode abhängig von der gewählten Programmiersprache einzubinden
 
 

Mr. Foo

Bug in der Vererbung von Java

  • Homepage

Suche

Kategorien

  • Android (2)
  • C-Sharp (4)
  • Datenbank (30)
  • Delphi (2)
  • Entwicklung (36)
  • Flash (5)
  • Games (10)
  • Gutscheine (4)
  • Hardware (14)
  • HTML CSS (16)
  • Internet (88)
  • Java (32)
  • Javascript (24)
  • Linkdump (9)
  • Linux (102)
  • Low-Level (10)
  • Lua (8)
  • Musik (9)
  • Netzwerk (25)
  • New World Order (109)
  • Perl (3)
  • PHP (130)
  • Magento (5)
  • Symfony (3)
  • Zend Framework (7)
  • Probleme und Lösungen (26)
  • Python (22)
  • Ressourcen (23)
  • Sicherheit (91)
  • Software (60)
  • Sonstiges (47)
  • Own Stuff (48)
  • Spass (46)
  • Technik / Wissenschaft (4)
  • Tips (15)
  • Weisheiten (17)
  • Windows (23)
  • Wort des Tages (15)


Alle Kategorien

Archive

  • Mai 2012
  • April 2012
  • März 2012
  • Das Neueste ...
  • Älteres ...

Abonnieren lohnt sich!

  • XML RSS 2.0 feed
  • ATOM/XML ATOM 1.0 feed
  • XML RSS 2.0 Kommentare

Tagcloud

Datenbank Entwicklung Internet Java Javascript Linux Lösung Netzwerk News New World Order PHP Problem Probleme und Lösungen Sicherheit Software Sonstiges Spass Tipp Update Windows

Beliebte Einträge

  • Magento ist scheisse (197)
  • Plugin-container.exe deaktivieren (107)
  • BWin Betrug und Abzocke bei Minigames? (65)
  • C compiler cannot create executables unter Debian (53)
  • Scheiss Linux - USB-Platte viel zu langsam (wenns mal funktioniert) (43)
  • Sicheres Kontaktformular mit PHP - Spam verhindern (37)
  • UML-Diagramme aus Java-Klassen generieren – Java2UML (28)
  • Es konnte keine TCP/IP-Verbindung mit dem Host hergestellt werden (28)
  • Option Bug im Internet Explorer bei Nutzung von innerHTML und Javascript (24)
  • Zend Studio - Javaw.exe lastet die CPU aus (24)

Kommentare

Hugo zu BWin Betrug und Abzocke bei Minigames?
So, 20.05.2012 12:25
ich habe mich gestern auf BWIN reg [...]
Ubuntu 12.04 zu The assembly mscorlib.dll was not found or could not be loaded.
Fr, 18.05.2012 17:11
Hat bei mir leider nicht geklappt. [...]
Oliver Riske zu Es konnte keine TCP/IP-Verbindung mit dem Host hergestellt werden
Di, 15.05.2012 20:38
Super Danke!
anon zu BWin Betrug und Abzocke bei Minigames?
Sa, 05.05.2012 18:43
ihr scheiss betrüger
Jürgen zu Unable to elevate error:1814 VLC Problem
Mi, 02.05.2012 16:54
So einfach ist es bei mir jedenfal [...]
 

Kontakt/Informationen