Cast zwischen zwei Unterklassen der selben Oberklasse.

Status
Nicht offen für weitere Antworten.
J

Joltan

Gast
Habe hier ein kleines Verständnisproblem bezüglich Vererbung:

Code:
    public static void main(String[] args) {
        // TODO code application logic here
        ServerList sl = new ServerList();
        ListServer ls = new ListServer();
        QueryServer qs = new QueryServer();
        qs = (QueryServer)((baseServerClass)ls);
    }

bringt mir eine ClassCastException - obwohl beide Klassen von 'baseServerClass' abstammen:
Code:
public class baseServerClass {
    public long ID;
    public baseServerClass() {  
    }    
}
Code:
public class QueryServer extends baseServerClass {
    public QueryServer() {
    }   
}
Code:
public class ListServer extends baseServerClass {
    public String alias;
    public static long newID = 0;
    public ListServer() {
        this.ID = ++newID;
    }
}

Wenn es so nicht geht, wie kann ich dann eine Klasse in die andere und zurück überführen? Mir geht es darum, daß die beiden Klassen später etwa zwei Duzend innere Variablen von 'baseServerClass' erben, aber völlig verschiedene Methoden implementieren werden (ein Interface welches nur Konstanten erlaubt ist daher nicht die Lösung). Gibt's da keine einfachere (und weniger aufwendige) Lösung als Wert für Wert über eine spezielle Importmethode zu übertragen?
 
B

bygones

Gast
Joltan hat gesagt.:
Code:
        qs = (QueryServer)((baseServerClass)ls);
der cast ist auch nicht schlüssig.

ls zu baseServerClass zu casten ist kein Problem, da es eine Oberklasse von ServerList ist. Der cast danach ist aber nicht möglich, da es sich nicht um eine QueryServer handelt.

1. ServerList hat nix mit QueryServer zu tun
2. Cast zur Unterklasse ist nicht möglich.

dein Problem versteh ich in der Hinsicht nicht was das mit dem caste zu tun hat ? warum arbeitest du nicht nur mit der Oberklasse weiter egal als welche Unterklasse die Variable initialisiert wurde ?
 
J

Joltan

Gast
Ganz einfach: die jeweiligen Instanzen der zwei Klassen repräsentieren den selben Server haben jedoch unterschiedliche Aufgaben, werden in verschiedenen Threads genutzt und müssen nur gelegentlich synchronisiert werden - d.h. die inneren Variablen welche von der Basisklasse geerbt werden müssen wieder identische Werte enthalten.

Wenn's per cast nicht geht, wie dann? Gibt es eine Entsprechung zu Interfaces, welche aber Variablen anstelle von gemeinsamen Methoden definiert?
 
B

bygones

Gast
abstracte/normale Klassen.

aber ich versteh nicht warum du casten willst. wenn vererbung nimmst und auf die Subklassen angewiesen bist, weil sie eigenen Funktionalitäten definieren, warum casten? sie können automatisch alle nicht private deklarierten Methoden / variablen der Oberklasse nutzen.

aber das Ganze ist anders, wenn es allen Klassen die gleichen Variablen nutzen müssen. Dann ist Vererbung unsinn. da jede instanz seine eigenen Variablen hat und diese Variabeln untereinander nichts zu tun haben.

Dh Subklasse1 arbeitet mit anderen Variablen als Subklasse2, auch wenn sie von der gleichen Superklasse stammen.

Ich vermute du benötigst mehr eine Art ManagerKlasse die für alle Klassen Variablen stellt und für alle Klassen die gleichen Variablen bietet. Dann vergiss Vererbung und schau dir z.b. das Singleton Pattern an....
 
J

Joltan

Gast
Hab's erstmal auf andere Weise gelöst:

Code:
public class baseServerClass {
    public long ID;
    ...
    /** Creates a new instance of baseServerClass */
    public baseServerClass() {
       ...
    }
    
    public void copyS(baseServerClass bs){
        ID = bs.ID;
        ...
    }
}

Auf diese Weise kann ich jede der beiden ineinander überführen ohne zu casten. Werde mir die von Dir erwähnten Singleton Patterns noch anschauen - elegant ist meine Lösung jedenfalls nicht wirklich.

Den cast hatte ich nur verwandt, weil mir klar war, daß ein direktes Überführen der einen Unterklasse in die andere nicht möglich ist.
 

Bleiglanz

Gesperrter Benutzer
Code:
        Apfel ls = new Apfel(); // extends Obst
        Birne qs = new Birne(); // extends Obst
        qs = (Birne)((Obst)ls);
ist doch totaler Nonsense gewesen: du kannst einen Apfel nicht in eine Birne verwandeln, selbst wenn beide "Obst" sind....

das Hochcasten hat in deinem Fall nur den Compiler ausgetrickst, beim Runter-Casten fliegt dann eben ein Laufzeitfehler
 
G

Guest

Gast
Naja, das ist klar - ich hatte einfach nur nach einer einfachen Möglichkeit gesucht die für 'Obst' allgemein geltenden Eigenschaften wie 'Zustand' (frisch, vergammelt), 'Herkunftsland', etc. gleichzusetzen. Die spezifischen Eigenschaften von Äpfeln und Birnen sind dabei ja nicht betroffen.

In meinem konkreten Fall geht es im Gegensatz zu zwei verschiedenen Obstsorten allerdings um zwei verschiedene Beschreibungen für ein und den selben Server - die eine Subklasse (Klasse QueryServer) hat alle Funktionalität den Server abzufragen und die Rückgabe zu parsen, während die andere Klasse (Klasse ListServer) bei der Instanzierung eine eindeutige ID erzeugt, sonst aber keine speziellen Methoden implementiert und ausschließlich für die Verwaltung und Anzeige der Rückgabewerte (= innere Variablen der Basisklasse) genutzt wird (in einer speziellen ArrayList).

Zu Beginn wird für jedes ListServer Objekt ein entsprechendes QueryServer Objekt generiert. Die QueryServer Objekte fragen in einem seperaten Thread in einer Schleife immer wieder ihre ensprechenden Server ab, und werden nur nach einer erfolgreichen Anfrage mit dem entsprechenden ListServer Objekt synchronisiert. Derweil greifen andere Programmteile ausschließlich auf die ListServer Objekte zu.

Wie gesagt, über die in der Oberklasse implementierte CopyS-Methode hab ich's ja nun gelöst, hatte aber in meiner Unwissenheit gedacht es einfacher lösen zu können. Aber ich bin ja auch hier um zu lernen!
;)
 
J

Joltan

Gast
Uhm, das war von mir (vergessen einzuloggen) :oops:

Ich werde mir (sobald ich heute Abend Zeit habe) die Singleton Patterns mal ansehen, vieleicht findet sich da ja noch eine andere Möglichkeit. Nicht das sie jetzt noch nötig wäre, aber ich bin ja neugierig!
:D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
berserkerdq2 Habe ein Spiel entwickelt, dass immer in der 4 Runde einen cast-Fehler erhält Java Basics - Anfänger-Themen 3
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
O Cast Java Basics - Anfänger-Themen 16
R Cast java.awt.Graphics Java Basics - Anfänger-Themen 7
N Simpler cast? Java Basics - Anfänger-Themen 9
D Java Eclipse cannot be cast to java.awt.event.ItemListener Java Basics - Anfänger-Themen 3
O Kleine Frage zu cast Java Basics - Anfänger-Themen 3
A Ohne Cast auf Methode zugreifen? Java Basics - Anfänger-Themen 4
J Datentypen Cast von int zu char führ zu 'Sonderzeichen' Java Basics - Anfänger-Themen 2
K Cast bei equals Java Basics - Anfänger-Themen 2
N Vererbung Verschiedene Subclasses nach cast zur Superclass unterscheiden Java Basics - Anfänger-Themen 9
N Cast eines Objektes in eine Hashmap Java Basics - Anfänger-Themen 13
K Date cannot be cast to java.lang.Integer Java Basics - Anfänger-Themen 4
R Variablen Möglich?: Cast einer Referenzvariable auf den Typ seines Objektes Java Basics - Anfänger-Themen 19
S Datentypen Reflection Cast anhand eines Strings? Java Basics - Anfänger-Themen 7
M ListIterator + Cast Java Basics - Anfänger-Themen 12
D Wie "unchecked cast" hier vermeiden? Java Basics - Anfänger-Themen 2
M Cast nach int Java Basics - Anfänger-Themen 8
M object cast auf double Java Basics - Anfänger-Themen 2
I double (cast) rundungsproblem Java Basics - Anfänger-Themen 8
M Datentypen java.util.Arrays$ArrayList cannot be cast to [Ljava.lang.String; Java Basics - Anfänger-Themen 11
L Type/Cast Problem Java Basics - Anfänger-Themen 6
E Klassen ClassCastException bei gleichnamigem: paket.klasse cannot be cast to paket.klasse Java Basics - Anfänger-Themen 10
T Datentypen byte -Division..mal gehts mit cast mal ohne Java Basics - Anfänger-Themen 5
M Collections Cast bei ArrayList (List) Java Basics - Anfänger-Themen 2
T Datentypen default ist int, cast zu byte nötig... Java Basics - Anfänger-Themen 2
C Generics und Cast Java Basics - Anfänger-Themen 5
M Polymorphie Cast:Verständnis und Ausführung Java Basics - Anfänger-Themen 10
E Datentypen type cast problem (int, byte,) Java Basics - Anfänger-Themen 5
A Cast ohne Warnung bei Generics Java Basics - Anfänger-Themen 2
J cast zu int immer 0.. Java Basics - Anfänger-Themen 6
I java.lang.String cannot be cast to OBJEKT Java Basics - Anfänger-Themen 8
A Object -> String mit valueOf, toString oder cast ? Java Basics - Anfänger-Themen 6
M Cast vermeiden Java Basics - Anfänger-Themen 11
M Generics - "Unchecked cast"-Warnung wegbekommen Java Basics - Anfänger-Themen 4
B Exception cast to CORBA.Object Java Basics - Anfänger-Themen 2
K Cast-Operator Java Basics - Anfänger-Themen 3
Guybrush Threepwood Inhalt eines Strings für cast verwenden Java Basics - Anfänger-Themen 6
A Seltsame Class Cast Exception Java Basics - Anfänger-Themen 3
V Cast-Operator Java Basics - Anfänger-Themen 2
kulturfenster Cast Probleme Java Basics - Anfänger-Themen 2
V Frage zu final und Class bzw. Class.cast Java Basics - Anfänger-Themen 5
F paket.Klasse cannot be cast to paket.Klasse Java Basics - Anfänger-Themen 6
J Cast-Problem Java Basics - Anfänger-Themen 7
D Class Cast Exception Java Basics - Anfänger-Themen 5
R variabler cast Java Basics - Anfänger-Themen 5
G cast von Char nach int Java Basics - Anfänger-Themen 3
zilti Cast Exception bei JTable Java Basics - Anfänger-Themen 15
S "Unchecked Cast" Warnung Java Basics - Anfänger-Themen 3
G cast von int To Integer? Java Basics - Anfänger-Themen 3
M Double -> Int Cast funktioniert nicht. Java Basics - Anfänger-Themen 5
vogella Cast from Collection.toArray to String[] Java Basics - Anfänger-Themen 2
B Cast explizit verbieten Java Basics - Anfänger-Themen 10
E Cast von Object zu int (Array) Java Basics - Anfänger-Themen 19
W Java Cast bei Vectoren Java Basics - Anfänger-Themen 10
A Cast Generics Java Basics - Anfänger-Themen 6
M Class Cast Exception Java Basics - Anfänger-Themen 7
B Byte übergeben ohne cast? Java Basics - Anfänger-Themen 12
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
S Unterschied zwischen Denkweisen Java Basics - Anfänger-Themen 13
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
Ras Unterschied zwischen parser xml and api xml Java Basics - Anfänger-Themen 7
X Was ist der Unterschied zwischen materialisierten und nichtmaterialisierten Attributen einer Klasse? Java Basics - Anfänger-Themen 1
F Abstand zwischen zwei Objekten berechnen wie? Java Basics - Anfänger-Themen 1
S Längster Pfad zwischen zwei Vertices in einem Graph Java Basics - Anfänger-Themen 3
U Erste Schritte nextGaussian zwischen zwei Werten Java Basics - Anfänger-Themen 19
jhCDtGVjcZGcfzug Was ist der Unterschied zwischen diesen Quellcodes? Java Basics - Anfänger-Themen 3
rafi072001 Assoziation zwischen Musiker und Label Java Basics - Anfänger-Themen 1
I Best Practice Saubere Verbindung zwischen API und Business Layer mit DTO's Java Basics - Anfänger-Themen 2
A Parametar übergabe zwischen Methoden Java Basics - Anfänger-Themen 26
W User zwischen Optionen wählen lassen Java Basics - Anfänger-Themen 1
I Differenz zwischen LocalDateTime Java Basics - Anfänger-Themen 4
Leo_1789 Differenz ausrechnen zwischen denn idealgewicht und denn echten Gewicht Java Basics - Anfänger-Themen 7
E Wie gebe ich alle Daten zwischen zwei Zeitpunkten aus? Java Basics - Anfänger-Themen 2
P Methode die ausgibt wie viele Primzahlen es zwischen 2 und n gibt Java Basics - Anfänger-Themen 10
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
marcooooo Separator zwischen allen Zeichen eines Strings einfügen Java Basics - Anfänger-Themen 29
NeoLexx Zuweisungskompatibilität zwischen Vererbungsbeziehungen (Polymorphie) Java Basics - Anfänger-Themen 18
L Threads Synchronisierung zwischen threads Java Basics - Anfänger-Themen 4
N Berührung zwischen Rechtecken Java Basics - Anfänger-Themen 5
Y Unterschied zwischen WindowBuilder und herkömmlichen erstellen des GUI´s? Java Basics - Anfänger-Themen 9
J Wert zwischen JFrames übergeben Java Basics - Anfänger-Themen 2
U Worin besteht der Unterschied zwischen call by reference und call by value? Java Basics - Anfänger-Themen 14
E Unterschied zwischen new und import Java Basics - Anfänger-Themen 5
J Punkt auf,über,unter oder zwischen 2 Geraden Java Basics - Anfänger-Themen 14
A Kommunikation zwischen nebenläufigen Threads Java Basics - Anfänger-Themen 4
B Unterschied zwischen (List<T> a) und (T[] a) Java Basics - Anfänger-Themen 7
Dilara_K Abstand zwischen den Doppelwerten in einem Array herausfinden Java Basics - Anfänger-Themen 20
S Nach dem Herüberschieben eines Arrays zwischen 2 Frames öffnet sich das Frame nicht mehr Java Basics - Anfänger-Themen 12
D Zufallszahl zwischen 10 und 99? Java Basics - Anfänger-Themen 5
J Objektzugriff zwischen disjunkten Klassen Java Basics - Anfänger-Themen 1
L Den Winkel zwischen zwei Vektoren berechnen! Java Basics - Anfänger-Themen 2
A Methoden Unterscheid zwischen public und ohne Java Basics - Anfänger-Themen 9
X Input/Output Höchste Temperaturschwankung zwischen 2 Tagen Java Basics - Anfänger-Themen 2
Bluedaishi der Monat zwischen zwei Datumsangaben Java Basics - Anfänger-Themen 15
R Threads Pause zwischen zwei Schleifen Java Basics - Anfänger-Themen 1
Aprendiendo Unterschied zwischen Referenzvariable und Instanzvariable. Java Basics - Anfänger-Themen 2
N Unterschied zwischen Checked und Unchecked Exceptions Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben