Konstruktoren bei Vererbung

Status
Nicht offen für weitere Antworten.
L

lebesgue

Gast
Hallo ihr Lieben,

ich habe eine Klasse Punkt:
Code:
public class Punkt {

	private double x;
	private double y;
	
   public Punkt(double x, double y) {
		this.x = x;
		this.y = y;
	}
	
   public Punkt add(Punkt b) {
		return new Punkt(x + b.x, y + b.y);
	}

	public Punkt sub(Punkt b) {
		return new Punkt(x - b.x, y - b.y);
	}
	
                ...
}

und eine Klasse Viereck:
Code:
public class Viereck {
	
   private Punkt a;
	private Punkt b;
	private Punkt c;
	private Punkt d;

	public Viereck(Punkt a, Punkt b, Punkt c, Punkt d) {
		this.a = a;
		this.b = b;
		this.c = c;
		this.d = d;
	}
                ...
		
}

Wenn ich jetzt z.B. eine Klasse Trapez ableiten möchte:
Code:
public class Trapez extends Viereck {

                Punkt p;
                double laenge_parallele1, laenge_parallele2, hoehe;

                public Trapez(Punkt p, double laenge_parallele1, double laenge_parallele2, double hoehe) {
                                ???
                }
}

Wie sieht dann der Rumpf für den Konstruktor der abgeleiteten Klasse aus?
Weil
Code:
super(p,parallele1,parallele2,hoehe);
geht ja nicht, weil parallele1,... ja keine Variablen vom Typ Punkt sind.
Ich weiß zwar, wie ich aus einem Anfangspunkt, den Längen der beiden Parallelen und der Höhe des Trapezes die 4 Eckpunkte des Trapezes berechnen kann, aber WIE übergeb ich die dem Konstruktor Trapez ???

Es wäre echt klasse, wenn mir das jemand erklären könnte. :)
 

Soi

Mitglied
Du musst sie irgentwie umrechnen, sodass du Point-Objekte per super( , , , ) übergibst. Wie genau ist eine mathematische Frage.
[/quote]
 

Wildcard

Top Contributor
Verbrenn das am besten sofort. Der super Konstruktor muss das erste Statement im Konstruktor der Kind Klasse sein. Du müsstest in diesem Fall einige Berechnungen durchführen und dann noch neue Punkt Objekte anlegen und das alles in einem Statement. Sehr hässlich
 

Schandro

Top Contributor
wie wärs hiermit?

Code:
public static Trapez createInstance(Punkt p, double laenge_parallele1, double laenge_parallele2, double hoehe) {
     // deine Berechnungen
     return new Trapez( ... );
 }
                
public Trapez (Punkt a, Punkt b, Punkt c, Punkt d) { 
     super(a,b,c,d);}
 
P

progteufel

Gast
Hallo zusammen ich hab eine ganz ähnliche frage.
und zwar wenn ich mich an diese schema halte und innerhalb von createinstance meine berechnungen durchführen möchte, bekomme ich beispielsweise wenn ich p.x angebe die rückmeldung das Punkt.x not visible ist.
wie kann ich stattdessen auf die variable zugreifen ?

Schandro Verfasst am: 08. 11. 2008, 8:29 Titel:

--------------------------------------------------------------------------------

wie wärs hiermit?
Code:
 Code: 
 
 public static Trapez createInstance(Punkt p, double laenge_parallele1, double laenge_parallele2, double hoehe) { 
  // deine Berechnungen 
 return new Trapez( ... ); 
} 
                
public Trapez (Punkt a, Punkt b, Punkt c, Punkt d) { 
     super(a,b,c,d);}
[/quote]
 
S

SlaterB

Gast
entweder x public machen, was normalerweise eine schlechte Idee ist,
oder viel eher eine public Methode getX() anbieten und aufrufen, welche x zurückgibt,

noch viel eher nachdenken, ob überhaupt das x außerhalb des Punktes gebraucht wird
 
P

progteufel

Gast
vielen dank für die schnelle antwort erstmal

fein das mit getX() hat schonmal gut funktioniert.. nun häng ich aber an der createInstance..

ohne createInstance wird konstruktor inder Oberklasse erkannt bekomme aber in der unterklasse die fehlermeldung super construcotr is undefined;

setze ich aber das createInstance bekomme ich in der Oberklasse die Rückmeldung dass der Konstruktor undefined ist
in der unterklasse sind dann allerdings keine fehler mehr..
was mache ich falsch ?
 
S

SlaterB

Gast
ich sehe zwar in den ersten Postings manche Hinweise, wie zwei grundlegend unterschiedliche Konstruktoren (4x Punkt vs Punkt + 3x double)
die teilweise in Ober- und Unterklassen definiert sind,
aber wie die vielen einzelnen Codeschnipsel mit deinem Problem verbunden sind kann ich spontan nicht erkennen und möchte ich gar nicht tiefer ergründen,

grundsätzlich kann eigentlich das Hinzufügen einer statischen Methode keine Konstruktor-Probleme erzeugen,
außer du meinst, dass in der statischen Methode der dort verwendete Konstruktor angestrichen wird,

erstelle dir erstmal die beiden Klassen wie sie sein sollen und ohne Compilerfehler,
danach dann die statische Methode, ab saubersten in einer dritten separaten Klasse,
dann postest du hier deinen aktuellen Code + Fehlermeldung + Zeile des Fehlers falls bekannt
 
G

Guest

Gast
punkt klasse bzw vecotrklasse ist schon vorgegeben;
ebenso in der testklasse der konstruktor aufruf
Code:
quadrangle = new Square(new Vec2D(100, 100), 200); //entweder hier fehler

nun soll in einer neuen klasse ein quadrat entwickelt werden
die klasse schaut bei mir folgendermaßen aus
Code:
public class Square extends Quadrangle {
	

	public static Square createInstance(Vec2D vec2D, int i){  //oder hier
      double x;
		double y;
		x=vec2D.getX();
		y=vec2D.getY();
		
		// Berechne Eckpunkte
		Vec2D h=new Vec2D(x,y);
		x=x+i;
		Vec2D j=new Vec2D(x,y);
		y=y+i;
		Vec2D k=new Vec2D(x,y);
		x=x-i;
		Vec2D l=new Vec2D(x,y);
		return new Square(h,j,k,l);
	}
	
	public Square(Vec2D a, Vec2D b, Vec2D c, Vec2D d) {
		super(a, b, c, d);
	
	}
}
wenn ich nun wie oben beschrieben in meiner klasse das create instance weg lasse .. dann stimmt zwar (logischerweise) der methodenaufruf der oberklasse, allerdings bekomme ich dann die fehlermeldung dass mein super konstruktor nicht "gesetzt" ist.
oder mache ich einen denkfehler und habe die oberen postings falsch verstanden?
 
S

SlaterB

Gast
von Vec2D und Quadrangle war bisher überhaupt nicht die Rede

wenn Square nur den Konstruktor mit 4x Vec2D hat und keinen anderen,
dann kann dein Aufruf

>quadrangle = new Square(new Vec2D(100, 100), 200);

nicht funktionieren, das ist doch klar? es muss ein Konstruktor passend zu den Parametern vorhanden sein,
Konstruktoren der Oberklasse werden nicht vererbt
 
G

Gast

Gast
Hänge auch seit Stunden hier fest :(

Verstehe nicht wie man aus den 4 Variablen den Konstruktor aufrufen kann, der als 1. Argument den super-konstruktor der oberklasse hat und andre variablentypen erwartet...

das umrechnen und referenzieren ist kein problem, nur das is so eklig...
 
S

SlaterB

Gast
wenn ein Konstruktor fehlt, dann muss man ihn definieren,

was genau der noch fehlende Square-Konstruktor für einen Aufruf

> new Square(new Vec2D(100, 100), 200);

machen soll, musst du ja wissen ;)

wenn die 200 für die Seitenlänge stehen soll, dann musst du wohl im Konstruktor die fehlenden drei Punkte ausrechnen,

das ist aber nicht so elegant, denn vor dem super--Aufruf darf man nicht besonders viel rechnen,
der super-Aufruf muss der erste Befehl im Konstruktor sein,
vielleicht musst du dann super mit Dummy-Punkten aufrufen, danach die richtigen Punkte ausrechnen und neu setzen,
nicht besonders schön,

besser wäre eine statische Methode, die die 4 Punkte ausrechnet und erst dann einen Konstruktor aufruft,

ich habe nun aber keine Lust mehr, für dich solche Gedanken aufzuschreiben,
wenn du nicht erklärst, welche Klassen du hast, welche Bedeutung die haben, warum du irgendwas aufrust usw,
worum es überhaupt geht, dann denke ich mir nicht weiter jedesmal 90% dazu
 

aha

Mitglied
Empfehlung für alle die noch Probleme damit haben: macht keine static!
Es muss ausschließlich super() aufgefüllt werden. Es ist erschreckend einfach. Was genau in Super rein muss sag ich jetzt nicht, aber es ist wirklich nicht schwer, versucht einfach in Super die Vec2D's zu definieren, die Quadrangle übergeben werden müssen...
 
P

progteufel

Gast
Antwort auf meine frage wäre
quadrangle = new Square.createInstance(new Vec2D(100, 100), 200);
als konstruktor aufruf gewesen ..
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
Y Klassen, Vererbung, Konstruktoren Java Basics - Anfänger-Themen 13
B Vererbung und Konstruktoren Java Basics - Anfänger-Themen 33
N Vererbung von Konstruktoren mit Parametern Java Basics - Anfänger-Themen 7
J Vererbung und Konstruktoren Java Basics - Anfänger-Themen 14
L Klassen, Vererbung und Konstruktoren Java Basics - Anfänger-Themen 10
N Verschiedene Konstruktoren mit gleichen Datentypen Java Basics - Anfänger-Themen 8
C Konstruktoren und Variablen Java Basics - Anfänger-Themen 42
lougoldi Verkettung von Methoden und Konstruktoren Java Basics - Anfänger-Themen 4
J Konstruktoren und Grafik Java Basics - Anfänger-Themen 3
A Cannot find symbol mit Konstruktoren Java Basics - Anfänger-Themen 27
L Brauche Hilfe beim arbeiten mit Konstruktoren Java Basics - Anfänger-Themen 20
C Objekte und Konstruktoren Java Basics - Anfänger-Themen 2
M Methodenaufrufe im Konstruktoren Java Basics - Anfänger-Themen 31
M Vererbung Konstruktoren mit festen Werte Java Basics - Anfänger-Themen 2
F Mehrere Konstruktoren? Wofür? Java Basics - Anfänger-Themen 21
J Konstruktoren in Initialisierungsblöcke Java Basics - Anfänger-Themen 6
T Konstruktoren Java Basics - Anfänger-Themen 25
D was bedeutet this. bei Konstruktoren? Java Basics - Anfänger-Themen 4
C Die Klasse Menge mit Konstruktoren und einfachen Methoden Java Basics - Anfänger-Themen 5
F Mehrere Konstruktoren Java Basics - Anfänger-Themen 10
G Was ist der Nutzen von generischen Konstruktoren? Java Basics - Anfänger-Themen 4
Q Methoden Konstruktoren anlegen Java Basics - Anfänger-Themen 5
B Objekte in Konstruktoren übergeben Java Basics - Anfänger-Themen 5
D Zähler nicht sichtbar (Thema: Konstruktoren) Java Basics - Anfänger-Themen 2
A Überladen von Konstruktoren Java Basics - Anfänger-Themen 2
V Konstruktoren Java Basics - Anfänger-Themen 15
C Klassen StackOverflow bei erster Nutzung von Klassen/Konstruktoren Java Basics - Anfänger-Themen 9
F Konstruktoren Java Basics - Anfänger-Themen 4
M Erste Schritte Verständnis Problem Konstruktoren Java Basics - Anfänger-Themen 13
B Klassen Unterschied Konstruktoren. Java Basics - Anfänger-Themen 3
C Erste Schritte Konstruktoren verstehen Java Basics - Anfänger-Themen 7
W OOP Konstruktoren Erklärung Java Basics - Anfänger-Themen 14
N Abarbeitungsreihenfolge von Konstruktoren Java Basics - Anfänger-Themen 12
O Klassen und Konstruktoren Java Basics - Anfänger-Themen 7
V Konstruktoren -> Funktionsaufrufe Java Basics - Anfänger-Themen 7
Q Konstruktoren und Methoden Java Basics - Anfänger-Themen 2
C Konstruktoren Java Basics - Anfänger-Themen 7
J Konstruktoren Java Basics - Anfänger-Themen 10
M Konstruktoren & Veerbung Java Basics - Anfänger-Themen 6
T Konstruktoren Java Basics - Anfänger-Themen 6
P Enum Attribut in Konstruktoren Java Basics - Anfänger-Themen 10
R Vererbung Konstruktoren nicht erkannt Java Basics - Anfänger-Themen 17
H Klassen, Konstruktoren, Instanzen etc Java Basics - Anfänger-Themen 6
J OOP Konstruktoren, setMethode, getMethode usw. Java Basics - Anfänger-Themen 7
A überladene Konstruktoren Java Basics - Anfänger-Themen 7
L Frage zu Konstruktoren und dem this Operator Java Basics - Anfänger-Themen 16
W 2 Konstruktoren Java Basics - Anfänger-Themen 8
S Konstruktoren verketten Java Basics - Anfänger-Themen 6
A Konstruktoren sollen sich gegenseitig aufrufen Java Basics - Anfänger-Themen 10
B Konstruktoren Sichtbarkeit Java Basics - Anfänger-Themen 2
K Kann man Private-Konstruktoren doch aurufen? Java Basics - Anfänger-Themen 8
E Konstruktoren und Methoden Java Basics - Anfänger-Themen 10
E OOP individual + standard-Konstruktoren Java Basics - Anfänger-Themen 9
S Konstruktoren? Java Basics - Anfänger-Themen 5
K Konstruktoren Java Basics - Anfänger-Themen 13
H Konstruktoren – super! Java Basics - Anfänger-Themen 3
L Geschachtelte Konstruktoren Java Basics - Anfänger-Themen 4
hdi Kleine Design/Convention Frage zu Konstruktoren Java Basics - Anfänger-Themen 4
J Problem mit Konstruktoren Java Basics - Anfänger-Themen 2
G Überladen von Konstruktoren mit unterschiedlichen Datentypen Java Basics - Anfänger-Themen 4
H Befehl mit Konstruktoren Java Basics - Anfänger-Themen 2
Z wie kann ich überladene Konstruktoren "umleiten"? Java Basics - Anfänger-Themen 11
D Blöde(?) Frage zu Konstruktoren und set-Methoden Java Basics - Anfänger-Themen 3
G Interface und Konstruktoren Java Basics - Anfänger-Themen 3
G Frage zu Konstruktoren Java Basics - Anfänger-Themen 12
G Verständnisfrage zu Konstruktoren Java Basics - Anfänger-Themen 5
G Konstruktoren Java Basics - Anfänger-Themen 9
A Konstruktoren überladen Java Basics - Anfänger-Themen 9
H Konstruktoren + Hilfe Java Basics - Anfänger-Themen 12
H Konstruktoren werden nie geerbt Java Basics - Anfänger-Themen 3
O Vor-/Nachteile/Unterschiede von Konstruktoren und Methoden Java Basics - Anfänger-Themen 3
Bierhumpen 2 Konstruktoren Java Basics - Anfänger-Themen 15
T mehrere Konstruktoren für eine Klasse Java Basics - Anfänger-Themen 7
J Instantvariablen und Konstruktoren Java Basics - Anfänger-Themen 2
Y Vererben - Konstruktoren Java Basics - Anfänger-Themen 2
Z übergabe von string[] an konstruktoren oder methoden Java Basics - Anfänger-Themen 3
S Frage zu Konstruktoren Java Basics - Anfänger-Themen 7
G Problem mit Gültigkeit von Variabeln und Konstruktoren Java Basics - Anfänger-Themen 4
C Konstruktoren Java Basics - Anfänger-Themen 4
G Konstruktoren (was, wozu, wieso, warum) Java Basics - Anfänger-Themen 4
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
L Java- Vererbung Java Basics - Anfänger-Themen 4
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 12
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 1
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
M Vererbung Java Basics - Anfänger-Themen 6
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Java Basics - Anfänger-Themen 7
D Vererbung Java Basics - Anfänger-Themen 3
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35

Ähnliche Java Themen


Oben