Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Java » Variablen bei Vererbung überschreiben?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
04.03.2009, 23:30 Uhr
kronos
Quotenfisch
(Operator)


Hallo,
folgendes verwirrt mich:


C++:
class B
{
    String var="b-var";

    public String f()
    {
        return "b-func";
    }
}

public class A extends B
{
    String var="a-var";

    public String f()
    {
        return "a-func";
    }

    public static void main(String[] arg)
    {
        B b=new A();
        System.out.println("b has "+b.var+" and "+b.f());

    }
}


Ergebnis:

Code:
b has b-var and a-func

Wieso wird nicht die Funktion der Basisklasse aufgerufen?
Kann man das irgendwie bewirken oder ist die etwa überschrieben?
Bei der Variable funktioniert es auf einmal, was soll der Quatsch?

Und:

C++:
A a=new A();
System.out.println("a has "+a.var+" and "+a.super.f());


ergibt "a cannot be resolved to a type" an der Stelle wo ich auf die Überklasse zugreifen will.
Halte das für einen weiteren Beweis das Java blanker Unfug ist, lasse mich aber gerne eines Besseren beleheren
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>

Dieser Post wurde am 05.03.2009 um 16:13 Uhr von kronos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.03.2009, 13:42 Uhr
~kronos
Gast


Hu? Java-Freaks?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.03.2009, 19:11 Uhr
0xdeadbeef
Gott
(Operator)


In Java kommst du an die verdeckte Methode ohne weiteres nicht ran - mit Reflection dürfte sich da wohl was zusammenhacken lassen, aber eigentlich erlaubt Java sowas nicht. Das Schlüsselwort "super" hat lediglich innerhalb der Klasse eine Bedeutung, etwa

C++:
public class A extends B {
  public String f() {
    return super.f() + " from a-func";
  }
}


Ob man das jetzt als blanken Unfug betrachtet, ist im Zweifel Geschmackssache. Von C++ kommend wäre es wohl schon schön, diese Freiheit zu haben, weil man es so gewohnt ist, allerdings verfolgt Java einen gänzlich anderen Ansatz als C++s "Der Programmierer weiß besser als der Compiler, was er will"-Ansatz. Java ist der Ansicht, dass Klasse A sich auch wie Klasse A zu verhalten hat, und dass der Programmierer, wenn er ihr das Verhalten der Klasse B entlocken will, einen Fehler macht, den der Compiler ihm nicht erlauben sollte.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.03.2009, 23:20 Uhr
kronos
Quotenfisch
(Operator)


Danke.
Geht also nicht ohne weiteres.
Welche Funktion aufgerufen wird ist meinetwegen Geschmacksache. Aber wieso ist das Verhalten für Variablen wieder anders? Das find ich wirklich unsinnig.
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.03.2009, 23:48 Uhr
0xdeadbeef
Gott
(Operator)


Variablen werden nicht dynamisch aufgelöst. Wär auch ziemlich albern - wozu sollte man dann überhaupt verdeckte Variablen erlauben?

Üblicherweise benutzt man in Java deshalb set/get-Methoden (oder verdeckt seine Variablen gar nicht erst).
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Java ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: