Problem: Object in ein anderes Object "casten"



  • Hi

    ich habe eine Klasse z.b. Auto und zwei Subklassen BMW und VW. Die Klassen BMW und VW haben ja viele gleiche Eigenschaften.

    Ich möcht nun einen VW in einen BMW "casten". Das wollte ich folgendermaßen machen:

    VM polo = new VW();

    BMW 3er = (Auto)polo;

    Das Problem ist das im Konstruktor von BMW wichtige Sachen initialisiert werden. Wenn ich aber dem 3er einfach ein AutoObject zuweise wird der BMW Konstruktor ja nicht aufgerufen..

    Kann ich irgendwie den BMW Konstruktor aufrufen und die ganzen OBject Eigenschaften des polos in dieses Object kopieren?

    Das Problem ist nämlich das Auto wiederum eine Subklasse von einer Subklasse, einer Subklasse etc ist und ich somit gar nicht weiß was für Objekt eigenschaften ich kopieren müsste und für die gibt es dann auch nicht immer getter und setter.

    Hoffe jemand hat troz blöden Beispiel mein Problem verstanden.



  • Der Konstruktor wird sowieso nicht aufgerufen, du weist nur die Referenzen zu.

    Außerdem macht das keinen Sinn, einen VW in einen BMW zu casten. Weder in der Realität noch in einem Programm.

    Du könntest vielleicht einen Konstruktor BMW(VW einVW) erstellen, aber ich frage mich, wo hier der logische Sinn ist?

    BMW 3er = (Auto)polo;

    kann doch gar nicht funktionieren. Du kannst nicht ein Auto an eine BMW-Referenz zuweisen. Ein Auo könnte ja auch ein Smart sein (obwohl böse Zungen behaupten, dass ein Smart kein Auto ist).



  • Das funktioniert nicht.
    Dein VW, den du instanzierst ist und bleibt ein VW und kann daher nie im Leben ein BMW werden, obwohl natürlich beide Autos sind.

    ms



  • macht mein Problem Sinn?

    Die Sache ist folgende. Ich möchte einem JPanel eine Scrollbar hinzufügen, leider geht das nur wenn ich aus dem JPanel ein JScrollPane mache. (beides Kinder von Container. Die größe soll z.b identisch bleiben.)

    Das mit den Referenzen hab ich verstanden.
    Der Comiler hatte nicht gemeckert aber ich kann mir jetzt vorstellen warum er nicht erkennen kann das das nicht funktionieren kann. (denn es werden nur Referenzen kopiert und keine Objekte verändet, oder?)

    JPanel j = new JPanel();
    JOptionPane jo = new JOptionPane();
    j = (JPanel)(Container)jo;



  • Wenn du aus dem JPanel eine JScrollPane machst benötigst du doch gar keine Scrollbars mehr, oder?



  • CengizS schrieb:

    Wenn du aus dem JPanel eine JScrollPane machst benötigst du doch gar keine Scrollbars mehr, oder?

    Das ist doch genau der springende Punkt. Um dem JPanel eine scrollbar hinzuzufügen muss ich das Panel in einen JScrollPane transformieren.

    Wie soll ich das nun machen. Das JPanel hat zig interne VAriablen die müsste ich irgendwie extrahieren und dann ein Scrollbar Panel konstruieren welchem ich diese Parameter wieder übergebe... 😞



  • Es gibt doch schon so eine Pane ... javax.swing.JScrollPane oder versteh' ich dich grad falsch?



  • Um dem JPanel eine scrollbar hinzuzufügen muss ich das Panel in einen JScrollPane transformieren

    Oder du erzeugst ganz einfach ein neues JScrollPane und weist diesem dein JPanel als View zu.

    JPanel myPanel = new JPanel();
    [...]
    JScrollPane scrollPane = new JScrollPane(myPanel);
    

    Wo ist das Problem?
    (Oder verstehe ich da dein Problem komplett falsch?)



  • @Cengiz: häh?
    Ja es gibt die Klasse JScrollPane. Ich habe ein JPanel und möchte es DYNAMISCH ZUR LAUFZEIT mit einer Scrollbar austatten. Wie mache ich das?

    @destructor: Ja das würde gehen allerdings gibt es noch andere Methoden die myPanel.getParent() benutzen.

    JFrame frame = new JFrame();
    frame.getContentPane().add(JPanel);

    Jframe Parent = JPanel.getParent().getParent();

    Wenn ich das mit dem view mache geht das nicht mehr..


Anmelden zum Antworten