Re(7): Java-Dau-Anfängerproblem...
Geizhals » Forum » Programmierung » Java-Dau-Anfängerproblem... (63 Beiträge, 290 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
Java-Dau-Anfängerproblem...
11.07.2005, 13:50:53
Hi, Folks !

Habe mich in letzter Zeit wieder besseren Wissens in Java eingearbeitet...
Und hab' grad ein Micky-Maus-Prob:


public class Vater {

protected Vater() {}

public static boolean add ( int x ) {
return true;
}
}

public class Sohn extends Vater {

public static void main(String[] args) {
Sohn s = new Sohn();
Sohn.add(2);
}

public static int add ( int x ) {
return x;
}
}

---> Das ist nicht erlaubt - er motzt, weil die Methode add bei gleichen Parameter in Vater einen anderen Rückgabewert liefert als in Sohn...

Also in c++ wäre das erlaubt ;-).

Wozu braucht ma des ?

Also als Java-Laie dachte ich mir das wie folgt (und mußte daher schon viel umschreiben):
Es gibt eine Klasse Person - mit private-Gschichtln wie Zuname, Vorname, Gebdatum, ...
Person habe einen protected-Constructor - damit niemand selbst eine Person anlegen kann. Stattdessen gibt es eine Klassenmethode
> public static Person add(String Zuname, String Vorname, GregorianCal... GebDatum) - die zuerst mal nachsieht (in einem HashSet), ob es die Person schon gibt. wenn es sie gibt, liefert sie die bekannte Person zurück - wenn nicht, legt sie eine neue an und liefert die zurück. Grund: Auf diese Art will ich doppelte Personen vermeiden.

von Person gibt es eine abgeleitete Klasse Personal: sie hat dieselben Gschichtln wie Person - plus Job/Funktion, ...
Sie hat wieder einen protected Konstruktor - gleicher Grund wie bei Person.
Personal habe eine Reihe von Klassenmethoden "add"  -
so auch ein
> public static Personal add(String Zuname, String Vorname, GregorianCal... GebDatum)
---> Und genau da fetzt diese "$&%"!! Java-VM - eben wegen dem Rückgabewert von add().

Mir ist das ja komplett unklar...
Erstens sprech' ich hier von Klassenmethoden - also nix mit VMT. Irgendeine ominöse Forderung, warum das verboten sei in sauberen Design will noch nicht in meinen kleinen Schädel.
Zweitens ist mir der Workaround unklar...
Person::add() private machen nutzt auch nix - wieso net ???
Drittens scheint ein Object zurückliefern zwar als möglich aber bescheiden - denn jeder Aufrufende muß dann casten bzw. ein instanceOf scheint problematisch...
EDIT:
Viertens bin ich jetzt auf ein addPerson(), addPersonal(), ... ausgewichen - nur das ist ja auch besch*en... denn wozu sollte jede Klasse dann Trilliarden vererbter Methoden mitführen müssen ?

Ach ja, das bequeme Äquivalent in C++, das funktioniert:
class vater {
        public:
        static int add(int x);
};

int vater::add(int x)
{
        return 2;
}

class sohn: public vater
{
        public:
        static float add(int x);
};

float sohn::add(int x)
{
        return 2.3f;
}

int main() {
        sohn *s = new sohn();
        float f = s->add(2);
}



So oder so - ich denke wahrscheinlich zu C++-lastig...
wie macht man das sauber in Java ? Und /was/ ist der Hintergedanke von dieser IMHO stupiden, sinnlosen Limitierung ???

cu
ein frustrierter gepeinigter

11.07.2005, 14:10 Uhr - Editiert von gepeinigter_aon_neukunde, alte Version: hier
Antworten PM Alle Chronologisch
 
Melden nicht möglich
.  Re: Java-Dau-Anfängerproblem...  (Frankster am 11.07.2005, 14:07:47)
...  Re(3): Java-Dau-Anfängerproblem...  (Frankster am 11.07.2005, 14:19:36)
.....  Re(5): Java-Dau-Anfängerproblem...  (Frankster am 11.07.2005, 15:06:11)
.  Re: Java-Dau-Anfängerproblem...  (DeaconFrost am 11.07.2005, 17:13:42)
...  Re(3): Java-Dau-Anfängerproblem...  (DeaconFrost am 12.07.2005, 12:09:04)
.....  Re(5): Java-Dau-Anfängerproblem...  (DeaconFrost am 12.07.2005, 13:29:44)
.......
Re(7): Java-Dau-Anfängerproblem...
12.07.2005, 14:28:09
Makros gibt's in Java wirklich nicht. Die sind zwar sehr nützlich, aber auch ein zweischneidiges Schwert. Der Vorteil ist natürlich, dass ich mir ein Haufen Tipparbeit ersparen kann. Nachteile sind aber nicht vorhandene Typsicherheit und stetiges Wiederholen ein- und desselben Codes (jedesmal wenn ich das Makro benutze). Java ist enorm streng was Typen angeht, was auch manchmal lästig ist, dafür aber enorme Sicherheit bietet und viele Fehlerquellen schon im vorhinein eliminiert.
Wie wär's mit (statischen) Methoden?

Eclipse ist schon äußerst praktisch, aber ich hab auch schon mit Notepad entwickelt. Das geht auch ganz gut, aber wahrscheinlich nur wenn man zuvor seine C++-Kenntnisse vergisst :-)

Ad Pakete: Es ist beides. Durch Pakete hab ich einerseits den namespace, andererseits aber auch eine weitere Zugriffsebene. Ich kann ja in C++ zwei Klassen in einen namespace geben, die aber aufeinander nicht zugreifen dürfen. In Java ist das Zugriffsrecht gegeben.

VMT-Methoden: Dieses Gerücht habe ich auch schon öfters gehört ;-) Das war auch für frühere Java-Versionen nicht ganz unrichtig, aber in der modernen hot spot-VM ist das sicher überholt. Wie gesagt: Der JIT-Compiler ist mittlerweile enorm schlau geworden und optimiert bis zum Erbrechen.
Final-Methoden sind aber von ihrem Einsatzzweck her keine Performance-Optimierungsmassnahmen. Sie sind aus ganz anderem Grund da: Wenn ich kein Überschreiben wünsche bzw. kein sinnvolles Überschreiben möglich ist. Das macht in diversen Fällen absolut Sinn.
Dieses Instrument nur zur Performance-Optimierung einzusetzen geht IMHO an der Sache völlig vorbei und kann im schlimmsten Fall nur zu einem führen: vermurkstes Design.

Du hast natürlich Recht mit dem Design. Ich muss da schon Performance-Überlegungen miteinfliessen lassen, sonst komme ich womöglich in Teufels Küche. Was ich meinte, waren Performance-Optimierungen im Code nach dem Motto: "Dieses Statement ist viel schneller, weil im Maschinencode sind das dann nur 4 schnelle XOR-Operationen anstatt..."
Das ist schon in C++ ziemlich unsinnig, weil die Flaschenhälse ja meist im Design entstanden sind und nicht bei irgendwelchen Statements. In Java mit virtueller Maschine, Garbage Collector und JIT-Kompilierung auf allen möglichen unterschiedlichen Plattformen (vom Handy bis zum Business Server) macht sowas ja schon überhaupt keinen Sinn, denn ob und welcher Maschinencode da herauskommen wird ist beim Schreiben sicher nicht vorhersehbar...



Antworten PM Alle Chronologisch Zum Vorgänger
 
Melden nicht möglich
.........  Re(9): Java-Dau-Anfängerproblem...  (DeaconFrost am 12.07.2005, 15:11:21)
.  Re: Java-Dau-Anfängerproblem...  (adhoc am 13.07.2005, 12:03:34)
...  Re(3): Java-Dau-Anfängerproblem...  (adhoc am 13.07.2005, 13:31:54)
...  Re(3): Java-Dau-Anfängerproblem...  (adhoc am 13.07.2005, 13:40:48)
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung