Vererbungs - Probleme

Status
Nicht offen für weitere Antworten.

toxictype

Mitglied
Hallo,

da ist er wieder!

Wir haben eine Aufgabe bekommen, in der wir mit Vererbung arbeiten sollen. Es soll eine Superklasse, drei Unterklassen und eine Testklasse entworfen werden.

Ich habe mich also an den Rechner geworfen und die Aufgabe 'gelöst'!
Allerdings habe ich das Gefühl, dass ich die Vererbung nicht wirklich nutze.

Könnt ihr bitte mal einen Blick auf die Super-, eine Unterklasse und die Testklasse werfen?

Dankeschön!

Superklasse:
Code:
/**
* Punkt.java
* Klasse, die vererbt!
*/

// Superklasse
public class Punkt {
	protected double x,y;

	// Konstruktor (public entfernt, da public Standard ist
	Punkt(double x, double y) {
		
		// this.x bezieht sich auf die Instanzvariable x
		// Dieser wird der übergebene Wert (Argument) zugewiesen
		this.x = x;
		this.y = y;
	}
	
	/**
	* @return x,y Koordinaten eines Punktes werden zurueckgegeben.
	*/

	// Methode
	public String text(){
		return new String("(" + x + ", " + y + ")");
	}

	/** Gibt die Koordinaten des Punktes (x,y) aus.
	* Ruft dazu die Methode text().
	* @return Formatierte Ausgabe der Punktkoordinaten.
	* @see Punkt#text()
	*/

	public String toString(){
	return new String("Punkt: " + text());
	} 
}
// Ende Superklasse Punkt

Unterklasse:
Code:
// Unterklasse Quadrat
class Quadrat extends Punkt {
	
	//
	double deltaX;

	// parametrisierter Konstruktor
	Quadrat (double dX, double x, double y) {
	
		// Aufruf des Konstruktors aus der Superklasse
		// Wieso soll der Konstruktor der Superklasse aufgerufen werden?
		// Die Parameter werden doch bei Objekterzeugung übergeben!
		super (x, y);
		
		//
		deltaX = dX;
	}
	
	// Methode mit Rückgabewert des Typs double, zur Ausgabe von deltaX
	double getDeltaX() {
		return deltaX;
	}
	
	// Methode mit Rückgabewert des Typs double, zur Ausgabe des Umfangs
	double getUmfang(){
		return 2 * (2 * deltaX) + 2 * (2 * deltaX);	
		//return 2 * x + 2 * y;	
	}
}
// Ende Unterklasse Quadrat

Testklasse:
Code:
// Testklasse

class DemoPunkt {
	public static void main (String args[]) {
	
	// Objekterstellung
	Punkt pu = new Punkt(20.0,20.0);
	Quadrat qu = new Quadrat(20.0,20.0,20.0);
	Rechteck re = new Rechteck (30.0,5.0,20.0,20.0);
	Kreis kr = new Kreis(12.0,20.0,20.0);
	
	// Ausgabe der Koordinaten von Punkt
	System.out.println("Daten Punkt:");
	System.out.println("Koordinaten von " + pu.toString() + "\n");
	
	// Ausgabe des Umfangs des Quadrates
	System.out.println("Daten Quadrat:");
	System.out.println("Koordinaten von " + qu.toString());
	System.out.println("Das Quadrat hat folgenden Umfang: " + qu.getUmfang());
	System.out.println("DeltaX (Die Haelfe einer Seitenlaenge) betraegt: " + qu.getDeltaX() + "\n");

	// Ausgabe des Fläche des Rechteckes
	System.out.println("Daten Rechteck:");
	System.out.println("Koordinaten von " + re.toString());
	System.out.println("Das Rechteck hat folgende Flaeche: " + re.getFlaeche());
	System.out.println("DeltaY (Die Haelfe der anderen Seitenlaenge) betraegt: " + re.getDeltaY() + "\n");
	
	// Ausgabe des Umfangs und Flaeche des Kreises
	System.out.println("Daten Kreis:");
	System.out.println("Koordinaten von " + re.toString());
	System.out.println("Der Kreis hat folgende Flaeche: " + kr.getFlaeche());
	System.out.println("Der Kreis hat folgenden Umfang: " + kr.getUmfang());
	
	}
	
}
 

toxictype

Mitglied
Hi mic,

ich habe wegen des eh schon langen codes nur eine Unterklasse Quadrat zugefügt.
Vom Aufbau her sind die Unterklassen Quadrat, Rechteck und Kreis fast gleich!

Was meinst Du mit "Ein Quadrat ist ein Punkt ?"?

Wir sollen die Variablen x und y aus der Superklasse Punkt übernehmen!
 

mic_checker

Top Contributor
Ich finde die Struktur etwas komisch....bei Vererbung gilt i.d.R. eine "ist ein" Beziehung, da finde ich Quadrat <-> Punkt nicht gerade passend , obwohl man sich an der Stelle die philosophischen Betrachtungen etc. wohl sparen sollte ;)

Poste doch einfach mal alles damit man alles sieht was du hast, dann kann man auch konkret sagen was du verbessern kannst etc.

Btw. "new String(..)" brauchst net.... geb einfach so die Zeichenkette zurück.
 
B

bygones

Gast
ja halte die Logik da hinter nicht für sinnvoll.

Klingt der folgende Satz für dich logisch:

Ein Quadrat ist ein Punkt

nicht oder ?

ergo ist hier die vererbung nicht sinnvoll.
logischer wäre z.b.

Ein Quadrat ist eine Figur


habe den Titel auch geändert - ich bitte dich in Zukunft einen passenderen Titel zu wählen... "Ich brauch Hilfe" ist nicht sinnvoll, warum wärst du sonst hier... bitte wähle Titel entsprechend deinem Problem !
 

toxictype

Mitglied
Also, ehrlich gesagt finde ich die Logik auch etwas merkwürdig!
Aber das sollte im Hintergrund stehen, da ich die Superklasse 'Punkt' so vorgegeben und mit folgender Aufgabenstellung bekam:

Gegeben sei die Klasse Punkt, von der andere Klassen erben...

Programmieren Sie drei weitere Klassen, die von der Klasse Punkt direkt ider indirekt abgeleitet werden sollen...

? Tox


P.S.: Werde an den Titel denken! Sorry!
 
I

Ives

Gast
Ein Quadrat IST KEIN Punkt. Ein Quadrat HAT Punkte zur Beschreibung. Vererbung ist hier nicht angebracht.

Keine Ahnung auf welche Lösung dein Aufgabensteller hinaus will, oder ist die Aufgabe ein klein wenig anderes gestellt?
 
I

Ives

Gast
Steht in der Aufgabenstellung in welchem Kontext der Punkt steht?

Beispielsweise gibt es "Punkte" auf der Landkarte, diese können Städte, Denkmäler, Autobahnabfahrten usw. sein. Diese könnten von Punkt erben und unterschiedliche Attribute/Methoden haben.
 

Nova

Bekanntes Mitglied
Hallo,

Unser Prof hat uns mit einem ähnlichen bespiel die Vererbung klarmachen wollen.
Ein Teil des Beispiels war das Kreis von Punkt erbt, also "ein Kreis ist ein Punkt", Begründung: ein Kreis ist ein Punkt mit Radius.

Einerseits kann man das als gültige Vererbung verstehen, ich halte das aber für ein sehr unglückliches Beispiel...
Punkt ist in diesem Fall nicht graphisch gemeint sondern als Position, ersetzt man Punkt durch Position hört es sich schon fast logisch an: "ein Kreis ist eine Position mit Radius"
Ich denke man sollte solche unklaren Vererbungen vermeiden falls möglich.


Du nutzt die Vererbung schon. Ohne Vererbung müsstest du die Klassenvariablen x und y nochmal anlegen. Normalerweise gibt es noch die Methoden getX(), getY(), setX(), setY() in der Kasse Punkt welche du auch nicht nochmal kopieren müsstest.
Du kannst vielleicht auch noch die toSting() Methode der Superklasse benutzen um toString() Methoden der Subklassen zu vereinfachen (falls nicht schon passiert).
Wenn man später größere Projekte hat lernt man Vererbung schon zu schätzen!


mfg
Christian
 

mic_checker

Top Contributor
Hoffe nichts überlesen zu haben, aber das Figur Beispiel ist ja schon des öfteren erwähnt wurden.

Du könntest das auch mit Kreisen, Rechtecken, etc. modellieren, dann eine Klasse Figur erweitern, also davon ableiten, denn ein Kreis ist eine Figur, ein Rechteck ist eine Figur etc.
Es gibt dann ja best. Methoden die alle Figuren haben sollten, bzw. bestimmte Attribute. So kannst du z.B. den Flächeninhalt berechnen etc. pp. (um den Vorschlag von dbac etwas zu erweitern).

Gute Beispiele für Vererbung gibt es zahlreiche, aber man kann es auch mit Vererbung übertreiben....
 

toxictype

Mitglied
@Nova:

Die Profs halt! ;-)
Ich bin froh, dass Du mir weitergeholfen hast.
Das heißt also, dass der Code bzw. die Verwendung der Vererbung korrekt ist?



Normalerweise gibt es noch die Methoden getX(), getY(), setX(), setY() in der Kasse Punkt welche du auch nicht nochmal kopieren müsstest.

Ich habe eine weitere Version mit den Zugriffsmethoden!
Geht aber *seltsamerweiße' auch ohne! Meinst Du, ich sollte sie verwenden?


Wenn ich die toString() Methode der Superklasse für die allgemeine Ausgabe benutzen möchte,
müßte ich sie vorher noch erweitern, oder!?

Vielen Dank!!! :toll:

Tox
 

mic_checker

Top Contributor
Wenn du System.out.println(deinObjekt) aufrufst und deine Subklassen haben toString() nicht überschrieben so wird die toString() Methode deiner Superklasse aufgerufen (falls die auch nicht überschrieben wurde letztendlich die von Object).

In der Subklasse könntest du einerseits die toString() der Superklasse aufrufen, für die allgemeinen Parameter etc. und dann noch spezifische Informationen zu deiner neuen Klasse hinzufügen, z.B. zu deiner neuen Figur.
 

toxictype

Mitglied
Noch mal eine kurze Zwischenfrage:

Ist die Anwendung der Vererbung so korrekt?
Auch bezüglich der Objekte (new) und den Konstruktoren!

Danke!

Bis morgen!
Bin gar! :autsch: :bahnhof:
 

mic_checker

Top Contributor
abgesehen davon das das beispiel eher bescheiden ist (;-)) - solltest du noch beachten das alle deine Figuren z.B. einen Umfang besitzen und die Methode demnach auch in der Superklasse exisiteren sollte. Da stellt sich dann wiederrum die Frage was der Umfang von einem Punkt ist etc. pp. aber darauf will ich jetzt nicht eingehen.

Wichtig ist der Aufruf von super etc.
 

mic_checker

Top Contributor
Eher ein jein ;)

Du hättest wie gesagt noch von andern Methoden Gebrauch machen können die du je nach dem entsprechend in den Unterklassen angepasst hättest etc. pp. aber das Beispiel ist dafür auch nicht soo geeignet.

Also lass es so ;)
 

toxictype

Mitglied
Hi mic,

DANKE!!! :D

Mir ist es zunächst wichtig, dass die Variablen vererbt werden. Darauf wird am meisten geachtet, denke ich!

Du hättest wie gesagt noch von andern Methoden Gebrauch machen können die du je nach dem entsprechend in den Unterklassen angepasst hättest...

Meinst Du damit, dass ich Zugriffsmethoden einpflegen soll oder die Erweiterung der Methode toString() für die Ausgabe in den Unterklassen?

Gruß
Tox
 

mic_checker

Top Contributor
Um es an dem Figuren-Beispiel klar zu machen:

Jede Figur hat einen Umfang , Flächeninhalt etc.

Solche Methoden hättest du (normalerweise) in der Superklasse noch implementieren können und dann in den Subklassen bei Bedarf angepasst.
 

toxictype

Mitglied
Hallo, ich habe mich mal wieder an die Aufgabe gemacht!

Nur noch mal zum Verständnis:

1. Da die Instanzvariablen mit 'protected' deklariert sind, brauche ich keine Zugriffsmethoden in der Superklasse,
da mit 'protected' alle Variablen und/oder Methoden in den Unterklassen sichtbar sind.

2. Einen Standardkonstruktor benötige ich nicht, da ich selbst einen definiere!

Und dazu noch eine Frage zum Verständnis:

Wieso muß ich in den Unterklassen den Konstruktor der Superklasse aufrufen?
Werden die Daten denn nicht in der Klasse 'DemoPunkt' bei Objekterzeugung an den Konstruktor der Unterklasse gegeben?

Danke schon mal! :wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Landei Vererbung Vererbungs-Hierarchie von Wrappern Allgemeine Java-Themen 8
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
S Umstellung von File auf Path - Probleme mit Stream Allgemeine Java-Themen 5
C Probleme mit javax.mail.Session Allgemeine Java-Themen 8
M tomcat probleme Allgemeine Java-Themen 1
N Division macht Probleme Allgemeine Java-Themen 14
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
MarvinsDepression Probleme mit relativem Dateipfad Allgemeine Java-Themen 1
G Geotools Probleme nach PC-Wechsel Allgemeine Java-Themen 6
nibe1501 GUI Probleme Allgemeine Java-Themen 16
C Probleme mit dem WindowBuilder Allgemeine Java-Themen 3
P Selenium . Probleme ein Iron Icon Element anzusprechen Allgemeine Java-Themen 2
B Compiler-Fehler Probleme beim Kompilieren mit Jsoup Allgemeine Java-Themen 8
K VisualVM Profiling Remote Probleme Allgemeine Java-Themen 1
O Leerzeichen und Umlaute im Pfad einer Java Applikation machen Probleme Allgemeine Java-Themen 13
M Probleme bei Eclipse wenn ich entpacke Allgemeine Java-Themen 15
D Regex Probleme Allgemeine Java-Themen 2
M Probleme jar datei. Allgemeine Java-Themen 2
L Vererbung Verständnis Probleme Vererbung Allgemeine Java-Themen 2
Dann07 Probleme mit OpenAL Allgemeine Java-Themen 0
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
V Compiler-Fehler Online Compiler Probleme Allgemeine Java-Themen 4
M Probleme mit Negamax-Algorithmus Allgemeine Java-Themen 29
M Probleme mit BigDecimal Allgemeine Java-Themen 1
T Probleme mit NumberFormat Allgemeine Java-Themen 5
J Probleme exe-Start mit Task Scheduler Allgemeine Java-Themen 1
B Input/Output Probleme beim Ausführen von Shell-Befehlen mit Java Allgemeine Java-Themen 28
J Probleme beim einbinden von Zip4j library Allgemeine Java-Themen 6
F Variablen Palindromzahl (Probleme mit Methode) Allgemeine Java-Themen 9
K Data Konverter - Probleme mit Byte[] Kodierung Allgemeine Java-Themen 3
T Probleme mit dem Pfad zum Propertie file Allgemeine Java-Themen 7
H Swing HashMap zu Tabelle macht mir Probleme Allgemeine Java-Themen 4
Neoline Interpreter-Fehler Probleme mit Arrays.toString Allgemeine Java-Themen 7
F SQLite mit Java / Probleme beim INSERT Befehl Allgemeine Java-Themen 4
J Erste Schritte Probleme mit der Hauptklasse Allgemeine Java-Themen 14
J Tetris Probleme bei Klassen Allgemeine Java-Themen 14
J MinMax VierGewinnt Probleme Allgemeine Java-Themen 22
J Probleme mit CodeCoverage und Lombok Equals Allgemeine Java-Themen 1
S Eclipse Probleme beim Implementieren / Ausführen von jUnit 5-Test Suites Allgemeine Java-Themen 14
R Snake Probleme Allgemeine Java-Themen 2
A Probleme beim Verstehen einer Aufgabenstellung Allgemeine Java-Themen 11
RalleYTN 3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation) Allgemeine Java-Themen 0
Bluedaishi Druck Probleme mit PDF dateien Allgemeine Java-Themen 4
G Ant Probleme bei einer Installation die Apache ant+ivy verwendet Allgemeine Java-Themen 14
E TableView Probleme Allgemeine Java-Themen 7
perlenfischer1984 Probleme beim Mocken Allgemeine Java-Themen 6
S Kaffemaschine Programmierung Probleme Allgemeine Java-Themen 2
K Threads Runtime und Process Probleme Allgemeine Java-Themen 3
S Probleme mit unterschiedlichen Java-Versionen (Mac OS X 10.11) Allgemeine Java-Themen 0
S Event Handling keyPressed()-Probleme Allgemeine Java-Themen 2
VfL_Freak Große und seltsame Probleme nach Java-Update auf V1.8.0_91 Allgemeine Java-Themen 3
P Probleme mit Grafik (Java) Allgemeine Java-Themen 6
R probleme beim starten von jar unter linux Allgemeine Java-Themen 2
H Probleme mit DAY_OF_WEEK Allgemeine Java-Themen 4
Arif Probleme mit NullPointerException Allgemeine Java-Themen 2
E Probleme mit nextInt() und Exception Allgemeine Java-Themen 35
Streeber Probleme mit AWT-EventQueue: ArrayList Elemente hinzufügen Allgemeine Java-Themen 1
D Performance-Probleme mit Joda-Time Allgemeine Java-Themen 3
M Probleme beim rechnen, bei Zahlen mit führenden Nullen. Allgemeine Java-Themen 7
RalleYTN Probleme mit Encrypting Allgemeine Java-Themen 10
M Probleme mit Schriftarten PDFBox Allgemeine Java-Themen 3
J Probleme mit der Java-Runtime Allgemeine Java-Themen 10
G Probleme mit BufferedWriter und URL Allgemeine Java-Themen 4
S Probleme mit meinem MacBook Pro DRINGEND HILFE erbeten! Allgemeine Java-Themen 17
Androbin Interpreter-Fehler Probleme mit Rekursion - StackOverflowError Allgemeine Java-Themen 8
E JCuda-0.6.5 Probleme beim ausführen der Datei Allgemeine Java-Themen 0
M Runtime.exec() verursacht auf manchen Systemen Probleme - Ursache unklar Allgemeine Java-Themen 2
W JNDI - LDAP - Probleme beim editieren von Usern Allgemeine Java-Themen 0
R DBUnit Performance Probleme Allgemeine Java-Themen 0
S Probleme mit Collection Allgemeine Java-Themen 7
L Probleme mit Jar Allgemeine Java-Themen 6
N Zahlensysteme umrechnen; Probleme beim Umwandeln Allgemeine Java-Themen 4
K OOP OOP Gui Spiel + Vererbungen Probleme durch Nichtwissen!! Allgemeine Java-Themen 1
F Java Native/Shared Library (.so) laden macht Probleme Allgemeine Java-Themen 3
J Synchronized Probleme Allgemeine Java-Themen 7
J Java Progressbar & Download Probleme Allgemeine Java-Themen 10
S Probleme mit dem filechooser Allgemeine Java-Themen 1
J Comperator Probleme Allgemeine Java-Themen 4
A Probleme beim auslesen von Quelltext (HTML) Allgemeine Java-Themen 5
S Probleme mit Webappplikation Allgemeine Java-Themen 5
L Plötzlich Probleme mit der JVM :( Allgemeine Java-Themen 6
S starke performance probleme des forums Allgemeine Java-Themen 10
K Probleme bei Berechnung der Komplexität Allgemeine Java-Themen 7
R JRE Ablaufdatum seit 7u10 - Probleme bei selbst ausgelieferter JRE bekannt? Allgemeine Java-Themen 3
H Reg Exp Probleme Allgemeine Java-Themen 5
M Classpath Probleme bei JAR Generierung Allgemeine Java-Themen 2
S Probleme mit JAVA-Installation Allgemeine Java-Themen 3
D Probleme bei for-Schleife Allgemeine Java-Themen 4
R Probleme mit Javadoc Allgemeine Java-Themen 2
G Gson Probleme Allgemeine Java-Themen 2
P KI für TicTacToe programmieren > Probleme Allgemeine Java-Themen 2
M Google App Engine macht Probleme Allgemeine Java-Themen 4
H Probleme mit finally-Block und close() Allgemeine Java-Themen 4
F 2d array probleme Allgemeine Java-Themen 2
M 3D-Grafik Probleme beim drehen von Objekten Allgemeine Java-Themen 9
T Interface Probleme Allgemeine Java-Themen 8
C Eclipse Probleme bei selbst erstelltem Algorithmus Allgemeine Java-Themen 2
M Probleme mit String in Label übergeben. Allgemeine Java-Themen 6
H MediaManager Fragen/Probleme Allgemeine Java-Themen 6
U Probleme mit Kopiervorgang Allgemeine Java-Themen 3

Ähnliche Java Themen


Oben