vererbung einer "selbst-instanzierungs-klasse"

Status
Nicht offen für weitere Antworten.

MamboKurt

Mitglied
hmm ich hab da eher eine kleine - wahrscheinlich dumme - frage:
also mein ziel ist es mehere klassen zu schreiben, die sich slebst verwalten. dazu will ich , dass sich objekte nicht von außen einsehen oder direkt verändern lassen. dies soll alles über statische methoden laufen, in denen ich genau festlegen, was zu tun ist. ich wollte in guter objekt-orientierten arbeitsweise dies über vererbung machen und zwar ähnlich wie folgt:

Code:
// Oberklasse --------------------
import java.util.vecotr;

class Oberklasse
{
   private Oberklasse(){}

   public static void create()
   {
      objectvector.add(new Oberklasse());
   }

   public static void doSomeFancyStuffWithTheObjectsInTheVector()
   {
      // hier wir was mit den Objekten gemacht, die im Vector stehen
   }

   protected static Vector objectvector = new Vector();
}

// Unterklasse I ----------------

class UnterklasseI extends Oberklasse
{
   private UnterklasseI(){}

   public static void doSomeCrazyStuffWithTheObjectsInTheVector();
   {
      // hier wir was mit den Objekten gemacht, die im Vector stehen
   }
}

// Unterklasse II ---------------

class UnterklasseII extends Oberklasse
{
   private UnterklasseII(){}

   public static void doSomeCoolStuffWithTheObjectsInTheVector();
   {
      // hier wir was mit den Objekten gemacht, die im Vector stehen
   }
}

da beide Unterklassen von Oberklasse erben bekommen ja beide die methode create(). leider wird hier in den Unterklassen kein Unterklassen-onjekt erzeugt, sondern ein Oberklassen-objekt, oder sehe ich das falsch? wie bekomme ich das hin, dass in der geerbten methode ein Unterklassen-onjekt erzeugt wird?
prinzipiell hätte ich ja eine static abtract-methode geschrieben, aber das geht ja nicht.
Wenn jemand einen vorschlag hat, dann bitte her damit. ich wäre euch sehr verbunden.

.MamboKurt
 

AlArenal

Top Contributor
1. die Nutzung von statischen Methoden ist auf ein Minimum zu reduzieren
2. die Manipulation von außen kannst du über die Einstellungen zur Sichtbarkeit von Feldern und Methoden steuern
 

MamboKurt

Mitglied
eigenltich wollte ich das ganze via vererbung machen, da ich evtl viele klassen mit diesen eigenlschaften schreiben will und mir den aufwand sparen wollte in jeder klasse die selbe createmethode schreiben zu müssen.
das ganze dient dazu, dass die klasse alle ihre instanzen selbst verwalten soll, da die instanzen alle gleichwertig und automatisiert behandelt werden. deshalb wollte ich alles in die klasse statisch einbinden und die instanzen als protected deklarieren, damit kein anderer direkten zugriff drauf hat.
 

AlArenal

Top Contributor
Ich nehme an, da liegt ein grundsätzlicher Designfehler zugrunde. Stopf deine Klassen in ein eigenes Package, mach die abgeleiteten Klassen nur im Package sichtbar und schon kommt "kein anderer" dran.

Ich rate dir, dir mal gute Literatur zu Klassendesign und Design Pattern reinzuziehen.
 

MamboKurt

Mitglied
ja ok danke. ich komme von c++ und bin das mit den packages noch nicht so gewöhnt, auch wenn in c++ ähnliche konzepte gibt.
hast du tips, welche literatur da zu empfehlen ist?
 

Murray

Top Contributor
Wenn Du irgendwo zum Erzeugen von UnterklasseI etwas schreiben willst wie
Code:
UnterklasseI.create();
,dann musst Du in den Unterklassen eine entsprechende create-Methode implementieren (von Überschreiben würde ich hier nicht sprechen, da statische Methoden nicht wirklich überschrieben werden).

Wenn Du aber auch mit dieser Syntax
Code:
Oberklasse.create( Unterklasse.class);
leben kannst, dann sollte das so gehen:
Code:
class Oberklasse
{
   private Oberklasse(){}

   public static void create( class concreteClass) throws InstantiationException, IllegalAccessException
   {
      objectvector.add( concreteClass.newInstance());
   }

   public static void doSomeFancyStuffWithTheObjectsInTheVector()
   {
      // hier wir was mit den Objekten gemacht, die im Vector stehen
   }

   protected static Vector objectvector = new Vector();
}
 

AlArenal

Top Contributor
MamboKurt hat gesagt.:
ja ok danke. ich komme von c++ und bin das mit den packages noch nicht so gewöhnt, auch wenn in c++ ähnliche konzepte gibt.
hast du tips, welche literatur da zu empfehlen ist?

- Thinking in Java, Bruce Eckel - vorletzte Verison gibts auch frei als PDF
- Professional Java Programming, Brett Spell, Wrox - vergriffen
oder
- Pro Java Programming, Brett Spell, Apress
- Java Design Patterns Workbook, Steven John Metsker, Addison Wesley Pro
 

Reinski

Mitglied
ja aber statische methoden sind doch Bestandteil des OO Konzeptes, oder?
Bzw. es macht doch Sinn, Methoden, die nicht Instanz-abhängig sind, auch als solche zu deklarieren?
Vielleicht kannst Du mir nen Link posten, wo diese Thematik (kritisch) besprochen wird, damit du das hier nicht alles schreiben musst... ;-)
Danke schonmal!

reinski
 

Wildcard

Top Contributor
static ist sozusagen das Gegenteil von OOP. In Java wird static eigentlich nur für Utility Klassen u.ä. verwendet, die nur ein paar Berechnung ausführen..
Am besten lernt man OOP in dem man komplett auf den Einsatz von static verzichtet. Irgendwann sieht man dann von alleine wo es sinnvoll ist trotzdem static zu verwenden.
Link kann ich dir keinen anbieten
 
B

bygones

Gast
natürlich macht es sinn bzw ist es vertretbar static zu verwenden..

aber nur in bestimmten Fällen

Sobald es um Konstante bzw um Variablen geht, die für eine Klasse gelten und nicht für eine Instanz.
Für Methoden einer Util Klasse, die man nicht instanzieren kann / möchte / muss (z.b. Math)

Alles andere ist static unsinn.

OOP lebt von dem Verhalten und den Eigenschaften von Objekten. Man baut nicht 100 gleiche Autos und fährt die identisch, sondern jedes Auto ist anders, hat einen anderen Fahrer, ein anderes Nummernschild... wo zum Teufel soll hier static sinnvoll sein ?

nein - static ist und bleibt für ausnahmen - punkt :)
 

Murray

Top Contributor
Statische Methoden haben m.E. mindestens zwei schwerwiegende Nachteile: sie können nicht überschrieben werden, und es kann in einer Anwendung niemals zwei verschiedene Implementierungen geben. Beides kann sich im Rahmen einer späteren Weiterentwicklung als hinderlich erweisen und erhebliche Änderungen erfordern.

Vorteil von statics: man spart sich die Erzeugung von Objekten und das Abräumen derselben durch den Garbage-Collector, was ja zur Laufzeit einen gewissen Overhead verursacht.

Und in manchen Situationen will man ja auch erzwingen, dass es ein Objekt im System nur einmal gibt (Stichwort Singleton), da ist static eben durchaus angezeigt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Vererbung auch ohne erzeugung einer Instanz möglich? Allgemeine Java-Themen 3
U Vererbung?! Allgemeine Java-Themen 15
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
MiMa Vererbung und Komposition?? Allgemeine Java-Themen 38
Kirby.exe Vererbung bei Generics Allgemeine Java-Themen 7
L Vererbung Verständnis Probleme Vererbung Allgemeine Java-Themen 2
W Generics + Vererbung Allgemeine Java-Themen 47
M Vererbung mithilfe von Bluej Allgemeine Java-Themen 3
M List -Tableview-Javafx-Vererbung Allgemeine Java-Themen 35
A Vererbung Selbstreferenzparameter Allgemeine Java-Themen 14
D Thema: Vererbung Ober-/Unterklassen Allgemeine Java-Themen 16
D Frage zu Vererbung Allgemeine Java-Themen 5
N Vererbung mit GUI Allgemeine Java-Themen 9
E Vererbung Countable mit Vererbung Allgemeine Java-Themen 6
J 2 Fragen zur Vererbung Allgemeine Java-Themen 5
T Javaklassen und vererbung Allgemeine Java-Themen 32
F Vererbung Allgemeine Java-Themen 5
Neumi5694 Vererbung Restriktive Vererbung Allgemeine Java-Themen 4
A Vererbung Übungsaufgabe Vererbung - Erstellung Klassenhierarchie Allgemeine Java-Themen 1
J Allgemeine Fragen zu Vererbung Allgemeine Java-Themen 1
kaoZ Generics und Vererbung Allgemeine Java-Themen 3
D Problem bei Vererbung abstrakter Klassen Allgemeine Java-Themen 6
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
T Super Klasse Vererbung Problem :/ Allgemeine Java-Themen 10
L Unabhängige Auslieferung bei Vererbung Allgemeine Java-Themen 20
S MVC - Vererbung Allgemeine Java-Themen 4
C Enums und Vererbung Allgemeine Java-Themen 6
F Google Guice + Generics + Vererbung Allgemeine Java-Themen 5
D Unterschied Vererbung und Polymorphie? Allgemeine Java-Themen 4
K Vererbung ohne Basisklasse zu kennen Allgemeine Java-Themen 20
Da_Tebe ArrayList<xyz> Verschachtelung oder Vererbung? Allgemeine Java-Themen 6
faetzminator statische Variablen in Interface - Vererbung? Allgemeine Java-Themen 9
M OOP PropertyChangeListener - Vererbung oder Komposition? Allgemeine Java-Themen 5
S OOP Mehrfache Vererbung von abstrakten Klassen Allgemeine Java-Themen 7
G Designfrage Vererbung ja oder nein Allgemeine Java-Themen 9
S equals - Identität ändern bei Vererbung? Allgemeine Java-Themen 5
dayaftereh Vererbung Hilfe Allgemeine Java-Themen 2
D Vererbung, Reflection und automatischer Methodenaufruf Allgemeine Java-Themen 24
A PropertyChangeListener Vererbung Allgemeine Java-Themen 4
P DefaultTreeCellRenderer Vererbung Allgemeine Java-Themen 5
S Objekte die Objekte enthalten: Keine Vererbung Allgemeine Java-Themen 4
J Vererbung bei abstrakten Klassen Allgemeine Java-Themen 2
S Vererbung: Welche Methode wird verwendet? Allgemeine Java-Themen 9
L Checkstyle: Wann ist eine Methode für Vererbung entworfen? Allgemeine Java-Themen 13
S normale vererbung als interface Allgemeine Java-Themen 2
S statische Methoden und Vererbung Allgemeine Java-Themen 6
R Vererbung - doppelte Paint-Methode Allgemeine Java-Themen 4
R Vererbung mit Interface und Abstract Allgemeine Java-Themen 3
B Vererbung bei enums ? Allgemeine Java-Themen 3
W Frage zu Vererbung / konkretes Beispiel Allgemeine Java-Themen 4
F Vererbung von SessionBeans Allgemeine Java-Themen 3
O abstract, privat, Vererbung Allgemeine Java-Themen 29
L Annotations mit Vererbung Allgemeine Java-Themen 4
M Singleton und Vererbung? Allgemeine Java-Themen 45
T Problem mit Vererbung Allgemeine Java-Themen 3
V Vererbung und Schleifen Allgemeine Java-Themen 5
C Comparable + Vererbung Funktioniert nicht? Allgemeine Java-Themen 4
A Ansatz Objektorientierung, Methoden Vererbung Allgemeine Java-Themen 2
D Listen von Generischen Typen inkl. Vererbung Allgemeine Java-Themen 2
D Zugriffsmethode nach Vererbung ändern? Allgemeine Java-Themen 5
S Vererbung in UML Allgemeine Java-Themen 3
T Nochmal Frage zu Vererbung Interfaces etc. Allgemeine Java-Themen 10
Y Gedanken zur Vererbung Allgemeine Java-Themen 7
F Vererbung, Generizität und Collections. Allgemeine Java-Themen 7
G Frage zu statischen Variablen bei Vererbung Allgemeine Java-Themen 15
F Vererbung Allgemeine Java-Themen 5
S Vererbung von mehreren Klassen? Allgemeine Java-Themen 5
C enum und Vererbung Allgemeine Java-Themen 3
K Problem mit Vererbung - Kein wirklicher Nutzen. Allgemeine Java-Themen 10
G vererbung vs benutzung Allgemeine Java-Themen 7
L Vererbung klappt nicht Allgemeine Java-Themen 5
W Probleme mit Arrays und Vererbung ! Allgemeine Java-Themen 5
J Vererbung. Allgemeine Java-Themen 8
H Frage zur Vererbung Allgemeine Java-Themen 5
S private Instanzvaribalen bei "Innerer-Vererbung" Allgemeine Java-Themen 9
M frage zur vererbung Allgemeine Java-Themen 12
G Generics und Vererbung. Allgemeine Java-Themen 21
M Vererbung von Hashtables Allgemeine Java-Themen 5
C dynamische Vererbung Allgemeine Java-Themen 6
O Text aus einer Textdatei rausholen, der zwischen zwei Schlüsselworten steht Allgemeine Java-Themen 4
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
M Methodenübersicht einer Klasse einsehen Allgemeine Java-Themen 14
T JNA, Aufruf der Funktionen einer dll Allgemeine Java-Themen 5
I Vom Monolith zu Services in einer Webseite Allgemeine Java-Themen 1
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
O Werte einer Generic LinkedList zusammenrechenen Allgemeine Java-Themen 14
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
I Wie kann ich den Wert aus einer If abfrage ausgeben Allgemeine Java-Themen 23
S HTML einer Webseite 1:1 so bekommen wie es auch der Browser anzeigt? Allgemeine Java-Themen 14
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
J (Geplante) Änderungen an einer Datei vorübergehend speichern und anwenden? Allgemeine Java-Themen 12
ME2002 Fragen aus einer Java Klausur Allgemeine Java-Themen 67
_user_q Obfuscate einer .jar-Datei mit ProGuard? Allgemeine Java-Themen 2
_user_q Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen? Allgemeine Java-Themen 20
C Parsen einer sich updatenden Html mithilfe von jsoup Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben