Klasse mit neuer Eigenschaft für jede Subclass (kompliziert)

Status
Nicht offen für weitere Antworten.
T

theomega

Gast
Hallo Leute,
ich habe da ein recht komplexes Problem und ich steh gerade ziemlich auf dem schlauch:

Es geht um folgendes:
1. Eine Basisklasse, die abstrakt ist und eine statische(!) Membervariable hat. Diese wird von der Basisklasse aus lesend verwendet um etwas damit zu tun.
2. Mehrere Klassen die von der Basis erben (Extends), dabei wird einmalig im "static" teil die Variable gesetzt. Für jede Klasse soll der Wert der Variable ein anderer sein können.

Mal ein kleines Beispiel, damit es deutlicher wird:
Die Basisklasse hat die statische Variable "hilfetext". Diese kann mit der Funktion "hilfeanzeigen" ausgegeben werden. Jede Unterklasse setzt nun den hilfetext entsprechend ihrer Aufgabe.

Das funktioniert im Kopf gut, geht nur in Java schief: Die statische Variable existiert nicht für jede Unterklasse einmal sondern nur einmal für die Basisklasse, damit geht das natürlich schief.

Ich habe das hier mal Programmiert:

Code:
public class StaticTest {
                public static void main(String[] args) {
                                Auto a = new Auto();
                                System.out.print("a: ");
                                a.hilfe();

                                Mixer m = new Mixer();
                                System.out.print("m: ");
                                m.hilfe();

                                Auto a2 = new Auto();
                                System.out.print("a2:");
                                a2.hilfe();
                }
}


abstract class BaseClass {
                protected static String hilfetext;

                public void hilfe() {
                                System.out.println(hilfetext);
                }
}


class Auto extends BaseClass {
                static {
                                Auto.hilfetext = "Mit einem Auto kann man durch die Gegend fahren";
                }
}

class Mixer extends BaseClass {
                static {
                                Mixer.hilfetext = "Mit einem Mixer kann man mehrere Gegenstände mixen";
                }
}

Die Ausgabe ist:
Code:
a: Mit einem Auto kann man durch die Gegend fahren
m: Mit einem Mixer kann man mehrere Gegenstände mixen
a2:Mit einem Mixer kann man mehrere Gegenstände mixen

dabei ist ja a2 ein Auto und ich hätte gerne das dasteht:
Code:
a: Mit einem Auto kann man durch die Gegend fahren
m: Mit einem Mixer kann man mehrere Gegenstände mixen
a2: Mit einem Auto kann man durch die Gegend fahren


Versteht jemand mein Problem und kann mir einen Hinweis geben ob es dafür eine Lösung geben kann und wenn ja wie ich das realisieren kann?

Danke schonmal
TO
 
L

Leroy42

Top Contributor
Das geht mit statischen Variablen oder Methoden so nicht
(widerspricht dem OO-Prinzip)

Du mußt schon eine nicht-statische hilfe()-Methode für
jede Unterklasse getrennt schreiben. Die wird dann auch
aufgerufen wenn sie in der Oberklasse als abstrakt
deklariert wurde, darf aber nicht auf statische
Variablen zugreifen.
 
K

kleiner_held

Top Contributor
Beispiel wie man es anders lösen könnte:

Code:
public abstract class BaseClass
{
    public void hilfe()
    {
       System.out.println(getHilfeText());
    }

    protected abstract String getHilfeText();
}


public class Auto extends BaseClass
{
   private static String hilfetext = "Mit einem Auto kann man durch die Gegend fahren"; 

   protected String getHilfeText()
   {
       return hilfetext;
   }
}
 
T

theomega

Gast
Jauh, das dass kein Fehler von Java ist sonder Designbedingt war mir klar, mir gings um alternativ-lösungen mehr.

Die Lösung von kleiner_held hat den Nachteil: Wenn der Hilfetext sehr aufwendig konstruiert werden muss und wenn es sich um mehrere Variablen handelt dann wird die ganze sache vom Code und von der Ausführzeit her ziemlich aufwendig.

Gruß
TO
 
RaoulDuke

RaoulDuke

Bekanntes Mitglied
theomega hat gesagt.:
Die Lösung von kleiner_held hat den Nachteil: Wenn der Hilfetext sehr aufwendig konstruiert werden muss und wenn es sich um mehrere Variablen handelt dann wird die ganze sache vom Code und von der Ausführzeit her ziemlich aufwendig.

Ich glaube du versuchst hier an der falschen Stelle mit Bitbasteleien zu optimieren. Hilfetexte gehören nicht in den Code sondern in Properties Dateien oder ähnliches.
 
T

theomega

Gast
Hoi,
oki, du hast schon recht, nur waren die Hilfesache nur ein Beispiel, in Wirklichkeit ist es wesentlich komplexer:
Ich schreibe an einigen simplen ORM-Klassen. Die funktionen sollen an bestimmten stellen Hibernate ähneln, allerdings wesentlich einfacher und auch einfacher anzupassen. Außerdem will ich möglichst die aufwendigen xml-definitionen von Hibernate vermeiden. Deshalb hatte ich eigentlich vor das jede Klasse ihr Mapping als Statisches Array abspeichert.
Das klappt auch von der Idee her gut wenn nicht das oben angesprochene Problem wäre: Das Mapping gilt immer für alle Klassen und nicht für jede einzeln.

Also bleibt mir momentan eigentlich nur das auslagern der Variablen in Methoden. Das ist zwar unschön, funktioniert wohl aber. Oder hat noch jemand eine andere Idee?

Danke an alle die geantwortet haben und Gruß
TO
 
RaoulDuke

RaoulDuke

Bekanntes Mitglied
Ich verstehe leider immernoch nicht so ganz genau was du machen willst. Du willst ORM machen, das hab ich verstanden. Aber was willst du da jetzt in statischen Variablen speichern, und warum? Hast du dir mal das DAO Pattern angeguckt? Könntest du mal etwas genauer erklären was du machen willst?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Die abzuleitende Klasse als Parameter übergeben Allgemeine Java-Themen 4
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
C Klasse mit Mockito simulieren Allgemeine Java-Themen 9
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
Thallius Key/Value Table in Klasse einlesen Allgemeine Java-Themen 14
S static in Interface und Klasse Allgemeine Java-Themen 2
W Was genau sind IOTools? Kann ich stattdessen nicht die Scanner Klasse verwenden? Allgemeine Java-Themen 3
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
D javassist API Klasse in MethodCall ermitteln Allgemeine Java-Themen 8
kodela Klasse mit "gezipten" Daten Allgemeine Java-Themen 6
J Builder Klasse mit Lombok bauen Allgemeine Java-Themen 2
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
M [SOAP] - Klasse aus WSDL ausschließen Allgemeine Java-Themen 2
N Generic Type einer Generischen Klasse während der Laufzeit bekommen Allgemeine Java-Themen 2
X Klassen Klasse BreakIterator Allgemeine Java-Themen 6
R Arraylist in andere Klasse leiten und bearbeiten Allgemeine Java-Themen 10
kodela Klassen Klasse "vergisst" ihre Daten Allgemeine Java-Themen 2
pkm Kann eine ServerSocket-Klasse nicht stateful sein? Allgemeine Java-Themen 4
E Socket Dynamische Klasse von ObjectOutputStream lesen. Allgemeine Java-Themen 8
M Matcher-Klasse findet match nicht Allgemeine Java-Themen 6
cool_brivk24 Variablen abfragen von Boolean von anderer Klasse Allgemeine Java-Themen 12
S Seltsames Ergebnis mit Date-Klasse Allgemeine Java-Themen 6
J int Werte in einer anderen Klasse in Arrays speichern Allgemeine Java-Themen 3
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3
Neoline Klassen Singleton Klasse buchmanager Allgemeine Java-Themen 19
M Kapselung Modellierung von Intervallen: Klasse Interval Allgemeine Java-Themen 4
B Übernommene Variablen(werte) aus der Main-Klasse ändern? Allgemeine Java-Themen 9
scitex Klasse kann nicht public deklariert werden Allgemeine Java-Themen 2
scitex Methode einer Klasse meldet Fehler "misplaced construct(s)" Allgemeine Java-Themen 13
I Collection - contains-Methode überschreiben (anonyme innere Klasse) Allgemeine Java-Themen 4
X Klassen File-Klasse wird als Directory markiert Allgemeine Java-Themen 8
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
J IndexOutOfBoundsException bei der Nutzung der Klasse Message von mime4j Allgemeine Java-Themen 5
P Array einer abstrakten Klasse Allgemeine Java-Themen 4
J Zugriff auf erstellte Objekte einer Klasse von einer Klasse ausserhalb Allgemeine Java-Themen 3
kodela Dynamisches Array in einer Klasse Allgemeine Java-Themen 5
M Was geschieht mit Java-Klasse, die aus ArrayList entfernt wird? Allgemeine Java-Themen 10
perlenfischer1984 Lombok Builder soll andere Klasse bauen Allgemeine Java-Themen 4
perlenfischer1984 Mit Lombok Builder Felder in Super Klasse füllen Allgemeine Java-Themen 12
T String aus While Schleife für ganze Klasse sichtbar machen Allgemeine Java-Themen 5
K Best Practice Auf die Klasse zugreifen im erzeugten ActionListener Allgemeine Java-Themen 2
K Mit Button neue Klasse öffnen Allgemeine Java-Themen 9
J Reflection mit Klasse und Subklasse Allgemeine Java-Themen 11
C Classpath Neue Klasse über einen Button ausführen Allgemeine Java-Themen 3
magdaStone Logikproblem Umschalten von booleans in anderer Klasse Allgemeine Java-Themen 7
P mehrer Verschiedene Objekte in einer Klasse erstellen. Allgemeine Java-Themen 4
A Java Klasse auf Tomcat während der Laufzeit austauschen Allgemeine Java-Themen 1
C Abstrakte Klasse, lokale Variable-Problem Allgemeine Java-Themen 1
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
Messoras Klassen Sämtliche Variablen einer Klasse übernehmen Allgemeine Java-Themen 6
H Methoden Methode 'updateItem' der Klasse 'TreeCell' Allgemeine Java-Themen 3
B Animierte Klasse schreiben - Wie? Allgemeine Java-Themen 9
M Klassen Eine Klasse in mehreren Klassen einbinden Allgemeine Java-Themen 11
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
AssELAss Log4j Logging Ausgabe für jede Klasse in seperates File Allgemeine Java-Themen 2
L Eclipse JavaFX Klasse starten programmatisch Allgemeine Java-Themen 1
F Try/catch über ganze Klasse Allgemeine Java-Themen 9
L Von ArrayList abgeleitete Klasse nur mit bestimmten Objekten füllen Allgemeine Java-Themen 1
so_ein_Komischer Erste Schritte java Math Klasse finden? Allgemeine Java-Themen 2
J beans.instantiate(): Klasse kann nicht instanziiert werden Allgemeine Java-Themen 2
I Interface Interface / Klasse - wieso Abstract? Allgemeine Java-Themen 13
R Abstrakte Basisklasse und instanzierte Objekte der abgeleiteten Klasse als Basisklasse übergeben Allgemeine Java-Themen 2
F Methodenaufruf mit abgeleiteter Klasse als Arg... Allgemeine Java-Themen 10
M Klasse in separaten Thread ausführen.Wie genau? Allgemeine Java-Themen 2
A Best Practice Unterschied zwischen einer sauberen Dependency Injection und einer statischen Klasse Allgemeine Java-Themen 5
F Methoden in der Enumeration Klasse Allgemeine Java-Themen 1
S Die Initialisierung von Feldern in ableitender Klasse erzwingen..? Allgemeine Java-Themen 16
S Mit Generics Klasse erstellen die selbst T erweitert..? Allgemeine Java-Themen 4
M Variable außerhalb Klasse definierbar? Allgemeine Java-Themen 2
F Abstrakte Klasse in "For each" Schleife Allgemeine Java-Themen 1
F Enums als innere Klasse sinnvoll? Allgemeine Java-Themen 3
C Klassen Problem mit Funktion einer Generischen Klasse die ein Interface implementiert Allgemeine Java-Themen 0
K Problem: Java-Klasse mit mehreren Threads als eigenen Prozess starten Allgemeine Java-Themen 3
N Automatisches einfügen einer selbst generierten ID in Klasse mit Annotation Allgemeine Java-Themen 8
F Klassen Klasse bei Button klick öffnen Allgemeine Java-Themen 11
F OOP Datenbank-Klasse überall verfübar Allgemeine Java-Themen 2
E KeyCode in anderer Klasse speichern Allgemeine Java-Themen 2
B Klassen Eigene Klasse als Array benutzen Allgemeine Java-Themen 3
M File IO Klasse ... wie einbinden Allgemeine Java-Themen 6
M XML DOM Klasse die Iterable Implementiert Allgemeine Java-Themen 1
P Name der Parent Klasse abfragen Allgemeine Java-Themen 8
D Arraylist eigener Klasse an iReport übergeben Allgemeine Java-Themen 7
L Classpath Klasse einbinden Allgemeine Java-Themen 8
3 OOP Instanzen aus einer Klasse persistent speichern. Allgemeine Java-Themen 9
M Classpath Standard Klasse überschreiben Allgemeine Java-Themen 2
Sogomn Klassen Alle in eine Klasse Allgemeine Java-Themen 11
E Boolean aus Klasse A als String in Klasse B ausgeben Allgemeine Java-Themen 4
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
O log4j - eigenes Log für einzelne Klasse Allgemeine Java-Themen 5
E Java Editor Klasse wird nicht weiter ausgeführt Allgemeine Java-Themen 4
J Allgemein gültige Klasse/Methode mehrfach verwenden Allgemeine Java-Themen 11
S Eine Klasse die jeden String nur einmal annimmt Allgemeine Java-Themen 4
M Klassen Klasse Dynamisch laden und Konstruktor aufrufen Allgemeine Java-Themen 1
D Eclipse Methode einer anderen Klasse aufrufen Allgemeine Java-Themen 14
S Zur Laufzeit Klasse mit einer anzahl von X Objekten erstellen Allgemeine Java-Themen 5
T Datentypen Eine Liste - verschiedenen Klassen - eine Abstracte Klasse Allgemeine Java-Themen 3
T Super Klasse Vererbung Problem :/ Allgemeine Java-Themen 10
T Klassen Mehoden einer Klasse erweitern Allgemeine Java-Themen 5

Ähnliche Java Themen

Anzeige

Neue Themen


Oben