Verstaendnisfrage Instanzierung?

Status
Nicht offen für weitere Antworten.
K

Kolp

Gast
Zunaechst einmal wuerde ich gerne wissen ob es moeglich ist ein von einem Objekt ein zweites Objekt zu erhalten, dass eine Instanz deren Superklasse ist?
 

Niki

Top Contributor
Wenn ich dich richtig verstanden habe meinst du das:
Code:
public class ParentClass{

}

Code:
public class ChildClass extends ParentClass{
  private ParentClass parent = null;

  private ChildClass(){
    parent = new ParentClass();
  }

  public ParentClass getParentClass(){
    return parent;
  }
}

Code:
ChildClass cc = new ChildClass();
ParentClass pc = cc.getParentClass();
 

BjörnBu

Aktives Mitglied
was ist das denn? glaube nicht, dass sowas sinn macht.
durch ein extends drückst du eigentlich eine ist-ein-beziehung aus.

Deshalb geht immer:

Code:
Subklasse object = new Subklasse();
Parentklasse objZwo = (Parentklasse)object;

Ich weiß aber nicht, ob du, Kolb, sowas wissen willst. Ich finde deine Frage leider absolut nicht verständlich. Vielleicht formuliert du nochmal etwas genau, was du suchst. In meinem beispiel gilt es zu beachten, dass objZwo nur eine Zeite Referez auf das selbe Objekt ist. An sonsten ist es aber theoretisch immer möglich in einer methode eines Objektes vom typ Subklasse ein ganz neues Objekt der Elternklasse (z.b. mit new) zu erstellen.

Bischen unverständlich, aber ich warte mit mehr Text lieber, bis ich deine Frage verstehe
 

Niki

Top Contributor
Sinn macht es keine, aber er wollte wissen ob es geht, so hab ich halt seine Frage verstanden. Den cast kann man sich auch sparen...
 
K

Kolb

Gast
Ich meinte schon das A und B dasselbe Objekt sind.

Also a = (A)b; hab ich mir schon ueberlegt.

Das Problem ist wenn man Methoden hat die mittels Reflection auf a zugreifen erscheint dieses immer noch als b.


Aehnliches Verhalten bei Polymorphismus. Wenn ich jetzt eine Methode ueberschrieben habe, aber eigentlich auf die originale Methode zugreifen will...wie mach ich das?

b.getX() -> soll die ueberschriebene Methode aufrufen

Weiss nicht wie der Step gehen soll: a = b;

a.getX() -> soll die originale Methode aufrufen
 
S

SlaterB

Gast
ah, da schreibe ich doch immer gern:

Überschreibung in Java ist allumfassend und auf gar keine Weise zu umgehen, mit keinem Reflection- oder sonstigen Trick,

wenn du ein B-Objekt hast, dann wird garantiert die B-Operation aufgerufen,
nur sie alleine könnte so gnädig sein, an ihren super weiterzureichen, z.B. je nach Konfiguration oder Parameter

am ehesten praktikabel wäre dann doch wieder, ein neues Objekt vom typ A zu erstellen, allerdings mit dem richtigen Inhalt von B,
ob das wohl zu handeln ist?
 

Niki

Top Contributor
Damit kann man sich ja helfen:
Code:
public class A{

  public String duh(){
    return "a";
  }

}

public class B extends A{

  public String duh(){
    return '"b";
  }

  public String superDuh(){
    return super.duh();
  }
}
 

Saxony

Top Contributor
Hiho,

wäre da eine Fallunterscheidung eine Lösung?

SlaterB hat gesagt.:
nur sie alleine könnte so gnädig sein, an ihren super weiterzureichen, z.B. je nach Konfiguration oder Parameter

Also in etwa so hier:

Code:
public class A {

    public String getX(boolean fromParent) {
		
        return "Ich bin Objekt A";
    }
}

public class B extends A {
	
    public String getX(boolean fromParent) {
		
        return (fromParent)?super.getX(fromParent):"Ich bin Objekt B";
    }

    public static void main(String[] args) {
		
        B b = new B();
		
        System.out.println(b.getX(true));
        System.out.println(b.getX(false));
    }
}

[edit]
Im Vergleich zur Lösung von Niki hat man nur eine Methode, bleibt hierbei die Methodensignatur gleich und die Methode ist auch wirklich überschrieben.
[/edit]

bye Saxony
 
S

SlaterB

Gast
aber dass zweite Operationen auch super.xy() aufrufen können ist schon ein qualitativer Vorteil,
mein Satz 'nur sie alleine könnte so gnädig sein' ist dann nicht vollständig formuliert
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben