Konstruktur in abstract class
-
in java gibt es abstract Klasse und Interface, welche anscheinend vergleichbar mit virtuelle Klasse und pure virtuelle Klasse in C++ sind
aber in C++ wenn ich member variblen in virtuelle Klasse initialieren will, dann
ungefähr soCDerivedClass::CDerivedClass() :CBaseClass(1, 2) //init member variablen durch Baseclass C'tor {}
aber abstract Klass in java besitzt keinen C'tor, wie kann ich dann in DerivedClass BaseClass initialieren?
-
Abstrakte Klassen haben natürlich auch Konstruktoren.
-
einfach einen konstruktor definieren. erbende klassen müssen den dann aufrufen.
-
public abstract class AbstrakteKlasse { private int attribut; public AbstrakteKlasse() { // Dies ist der Konstruktor der abstrakten Klasse attribut = 0; } // Virtuelle Methode public abstract int getAttribut(); } //---------------------------------------- public class Klasse extends AbstrakteKlasse { public Klasse() { // Aufruf des Konstruktors der Überklasse super(); } @Override public int getAttribut() { // Virtuelle Methode wurde implementiert return attribut; } }
-
alles klar, noch eine Frage:
muss man jedes mal private,protected, public vor jedem Member Variable u. Methode schreiben,(wenn nicht, dann ist nur gültig in demselben Package), Z.B. wie in C++class myclass { public: //only once void set(); int get(); private: //only once int i; int j; };
-
netrobot schrieb:
alles klar, noch eine Frage:
muss man jedes mal private,protected, public vor jedem Member Variable u. Methode schreiben,Ja, muss man (leider...)
-
wieso leider? durch diese syntax ist gewährleistet, dass man seine methoden an jeder x-beliebigen stelle des klassenkörpers platzieren kann. und um die sichtbarkeit einer methode zu ändern genügt es, genau eine stelle anzupassen.
-
es mir gerade eingefallen:
in java, wenn eine Klasse gehört zu einem Package, die muss auch in dem Ordner speichert, wo der Packagename gleichzeitig auch Ordner Name ist, damit der Compiler die Klasse finden kann. In C++ kann man solche Struktur auch in der Projektdatei speichern, z.B. in .dsp. Hat java auch ein Projectdatei, oder die verschieden Dateien sind einfach in verschiedenen Ordner verstreut? die Verbindung ist nur abhängig von den Packagenamen (Ordnername)
-
.classpath
-
Java hat keine Projektdateien, ebensowenig wie C++. Projektdateien gibt es nur in IDEs.
Die Paketstruktur in Java muss auf jeden Fall der Verzeichnisstruktur entsprechen. Alles andere macht keinen Sinn.