casten

maxxi

Bekanntes Mitglied
hi, ne Anfängerfrage.
Ich habe eine Klasse Person und eine Klasse Frau. Frau erbt von Person.
Jetzt mache ich:
Person p = new Person();
Aber wie kann ich von Person auf Frau casten?
 

maxxi

Bekanntes Mitglied
Und dann die Werte aller Eigenschaften von Person an Frau übergeben?

Person p = new Person();
p.xxx = 123; <- irgendeine Eigenschaft

Frau f = new Frau(); <- Klasse Frau erbt die Eigenschaft xxx von Person
f.xxx = p.xxx;

Macht man das so? Oder ist das nicht schön? Geht man da in der Praxis dann vielleicht irgendwie anders vor?

Definiert man dann ev. in Frau irgendwelche Sachen, die sich darum kümmern, dass alle Eigenschaften automatisch übernommen werden? Also vielleicht so irgendwie:

Person p = new Person();
p.xxx = 123;

Frau f = new Frau();
f.FromParent(p); <- diese Methode übernimmt dann alles von p in f

Oder macht man das ganz anders?
 

Murray

Top Contributor
Also vielleicht so irgendwie:

Person p = new Person();
p.xxx = 123;

Frau f = new Frau();
f.FromParent(p); <- diese Methode übernimmt dann alles von p in f

Oder macht man das ganz anders?
Dafür würde man wohl eher einen sog. Copy-Constructor verwenden; etwa so:
Java:
public class Person {
  int xxx;
  public Person() {
  }
  public Person( final Person p) {
    if ( p != null) {
      xxx = p.xxx;
    } 
  }
}

public class Frau extends Person {
  public Frau() {
    super();
  }
  public Frau( final Person p) {
    super( p);
  }
}
 

maxxi

Bekanntes Mitglied
Schau mal hier: Java Blog Buch : 04.05 Vererbung da ist ein ähnliches Beispiel

Ansonsten vllt auch in die FAQ mal schauen:
Vererbung und Polymorphie
Hat mir leider alles nicht weitergeholfen. Was Vererbung und Polymorphie sind, weiß ich ja (hoffentlich). Aber ich suche eine Strategie, wie man das von mir angesprochene Problem richtig angeht.
 

maxxi

Bekanntes Mitglied
@Murray
Person soll unangetastet bleiben (ist meine heilige Kuh; Person darf nur seine Eigenschaften beinhalten).
Nur in der Klasse Frau ist alles erlaubt, dass Eigenschaften von Person in Frau übernommen werden.

Es geht nämlich letztendlich um eine Datebankanbindung:

class Auto <- hier werden alle Daten verwaltet
{ ...
}
class DbAuto extends Auto <- diese Klasse ist dann die Schnittstelle zur Datenbank
{ ...
}

Klasse Auto darf nicht angetastet werden, wenn dessen Daten in die DB gespeichert werden sollen. Es soll auch keine Methoden beinhalten, die vielleicht irgendwie in Zusammenhang mit der Datenbank stehen könnten.

In DbAuto ist aber alles erlaubt. Dort ist dann eine Methode Save zum Speichern in der Datenbank, oder eine Methode Fetch, um Daten daraus zu holen.

Das Problem ist folgendes:

Ich arbeite im Hauptprogramm mit Auto-Instanzen. Mit denen kann man dann weiß-gott-was-alles machen. Und vielleicht sollen die Infos dann auch in der DB gespeichert werden. D. h. aus Auto muss dann irgendwie ein DbAuto werden.
 
Zuletzt bearbeitet:

Murray

Top Contributor
@Murray
Person soll unangetastet bleiben (ist meine heilige Kuh; Person darf nur seine Eigenschaften beinhalten).
Nur in der Klasse Frau ist alles erlaubt, dass Eigenschaften von Person in Frau übernommen werden.


Ein Copy-Konstruktor kann natürlich auch in der abgeleiteten Klasse implementiert werden:
Java:
public class Person {
  public int xxx;
  public Person() {
  }
 }
 
public class Frau extends Person {
  public Frau() {
    super();
  }
  public Frau( final Person p) {
    this();
    if ( p != null) {
      xxx = p.xxx; 
    }
  }
}

Die Verwendung ist in beiden Fällen gleich:

Java:
  Person p = /*  ...  */;
  Frau f1 = new Frau( p);
  Frau f2 = new Frau( f1);
 

maxxi

Bekanntes Mitglied
Genau so eine Variante wäre mir auch schon eingefallen
Java:
public class Person {
  public int xxx;
  public Person() {
  }
 }
 
public class Frau extends Person {
  public Frau() {
    super();
  }
  public Frau( final Person p) {
    this();
    if ( p != null) {
      xxx = p.xxx; 
    }
  }
}
Ist das so professionell?
 

Murray

Top Contributor
Ist das so professionell?
Wie definierst du professionell?
Profession = Beruf, also professionell = berufsmäßig
Das sagt erstmal nichts über die Qualität aus...

Aber ersthaft: so ein Copy-Konstruktor ist für so ein Problem m.E. die gängige Lösung - auf jeden Fall ist das besser als deine postulierte fromParent-Methode, die zwar das gleiche macht, das aber prinzipiell irgendwann während der Lebensdauer des Objektes, während der Copy-Konstruktor naturgemäß ausschließlich bei der Objekterzeugung zum Einsaz kommt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
tom.j85 TicTacToe - probleme beim Casten Java Basics - Anfänger-Themen 6
B Datentypen Welcher Typ wird beim Casten übernommen? Java Basics - Anfänger-Themen 12
G Probleme beim casten von double zu int Java Basics - Anfänger-Themen 3
BuTTerBroTHDx Char Wert in int casten ? Java Basics - Anfänger-Themen 4
A Vererbung Mit Casten direkt auf Sub-Klasse Zugreiffen Java Basics - Anfänger-Themen 6
N Variablen zurück casten Java Basics - Anfänger-Themen 3
F Casten bei Implements Java Basics - Anfänger-Themen 2
S Klassen casten, IS-A Beziehung Java Basics - Anfänger-Themen 5
J Generics casten Java Basics - Anfänger-Themen 14
U Klassen Dynamisches Casten? Java Basics - Anfänger-Themen 39
T Probleme beim casten Java Basics - Anfänger-Themen 9
M Casten Java Basics - Anfänger-Themen 2
K Collections Vector zu String casten Java Basics - Anfänger-Themen 4
S Polymorphes Objekt in eigentliche Klasse casten Java Basics - Anfänger-Themen 6
masii Methoden Parameter casten? Java Basics - Anfänger-Themen 2
D Datentypen Abstrakter Datentyp lässt sich nicht casten Java Basics - Anfänger-Themen 7
U ArrayList casten Java Basics - Anfänger-Themen 37
F g.drawLine in g 2D casten Java Basics - Anfänger-Themen 5
A Klassen ArrayList richtig / sicher Casten? Java Basics - Anfänger-Themen 3
J Frage zu generischer Klasse und Casten Java Basics - Anfänger-Themen 14
M Frage zum Casten von Objekten Java Basics - Anfänger-Themen 5
M sicheres/unsicheres Casten bei Objekten Java Basics - Anfänger-Themen 13
D Object auf JTextpane / jTextArea casten? Java Basics - Anfänger-Themen 3
B Casten oder vielleicht was anderes? Java Basics - Anfänger-Themen 9
T Boolean in ein Objektdatentyp casten möglich? Java Basics - Anfänger-Themen 5
J Casten (Typumwandlung) Java Basics - Anfänger-Themen 12
P Casten Hash Map Java Basics - Anfänger-Themen 4
W Auf 'this' casten Java Basics - Anfänger-Themen 3
M Dynamisches Casten mal wieder Java Basics - Anfänger-Themen 4
D Casten eines Objekts: Funktion der Oberklasse aufrufen Java Basics - Anfänger-Themen 4
G Datentypen char to int casten - falsches Ergebnis! Java Basics - Anfänger-Themen 6
S casten array in int von float Java Basics - Anfänger-Themen 5
A Dynamisches casten Java Basics - Anfänger-Themen 19
C Probleme beim casten und Objekt zugriff Java Basics - Anfänger-Themen 12
P Klasse nach Element casten Java Basics - Anfänger-Themen 4
G Double casten Java Basics - Anfänger-Themen 8
O Object nach Double casten Java Basics - Anfänger-Themen 11
L Object[] in String[] casten Java Basics - Anfänger-Themen 7
V Gelesene FTP Datei richtig casten Java Basics - Anfänger-Themen 9
T Properties casten Java Basics - Anfänger-Themen 4
G Arrays casten? Java Basics - Anfänger-Themen 12
G string "null" in null casten Java Basics - Anfänger-Themen 3
M casten und Generics Java Basics - Anfänger-Themen 9
S Objekt Casten Java Basics - Anfänger-Themen 4
G String nach int casten Java Basics - Anfänger-Themen 5
G Vektor auslesen und als int Variable casten Java Basics - Anfänger-Themen 4
G String in Date casten. Java Basics - Anfänger-Themen 7
G String in Date casten Java Basics - Anfänger-Themen 4
G String in Long casten Java Basics - Anfänger-Themen 2
G Object[] [] nach vector casten. Java Basics - Anfänger-Themen 3
G printStackTrace(); in String casten Java Basics - Anfänger-Themen 3
G String in int casten Java Basics - Anfänger-Themen 2
G Integer[] nach int[] casten - wie? Java Basics - Anfänger-Themen 2
D Arrays casten Java Basics - Anfänger-Themen 12
G Casten ? Java Basics - Anfänger-Themen 3
HaukeG Casten to String und Vergleichen Java Basics - Anfänger-Themen 2
G ich komm nicht weiter -> String in int casten Java Basics - Anfänger-Themen 4
T Casten von Choice auf Vector oder Object[] Java Basics - Anfänger-Themen 14
B Vector nach float[] casten Java Basics - Anfänger-Themen 6
G String zu byte[] "casten"? Java Basics - Anfänger-Themen 3
M Hin und Her Casten Object->int und int->Object Java Basics - Anfänger-Themen 3
T Typsicheres casten eines Objects Java Basics - Anfänger-Themen 5
D Object[] in Liste casten? Java Basics - Anfänger-Themen 8
T Chaosprogrammierer hat einen fehler beim casten? Java Basics - Anfänger-Themen 5
J Attribut casten Java Basics - Anfänger-Themen 3
A Array mit generischen Typen casten? Java Basics - Anfänger-Themen 6
C Automatisches Casten => inkompatibel Java Basics - Anfänger-Themen 7
G Byte-Code einlesen und zu Hex casten Java Basics - Anfänger-Themen 2
T Object[] zu String[] casten? Java Basics - Anfänger-Themen 3
R Double nach Integer casten Java Basics - Anfänger-Themen 8
L Adresse in String[] casten Java Basics - Anfänger-Themen 6
M Object auf Interface casten? Geht das? Java Basics - Anfänger-Themen 21
U ArrayLists und Casten Java Basics - Anfänger-Themen 2
O TreeMap nach Object[] casten? Java Basics - Anfänger-Themen 3
M Casten bei Objekten? Java Basics - Anfänger-Themen 4
S casten von Interface zu Klasse unterbinden Java Basics - Anfänger-Themen 15
M long nach String casten Java Basics - Anfänger-Themen 2
U String nach Integer Casten. Java Basics - Anfänger-Themen 4
G Sting nach int casten Java Basics - Anfänger-Themen 13
A Object casten? Java Basics - Anfänger-Themen 3
R Casten Java Basics - Anfänger-Themen 3
F Casten: Object nach Array Java Basics - Anfänger-Themen 10
M Casten Java Basics - Anfänger-Themen 2
H komme mit casten nicht klar Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben