Frage zu Interfaces Bsp.

P

PsychoStyle

Gast
Schönen Tag, hab nen kleines Problem, wo ich nicht weiter komme und ich hoffe hier gibt es nen paar Programmierer, die lust und Zeit haben sich mit mir zu beschäftigen!

Also, meine Aufgabenstellung war es, ein Programm zuschreiben mit den Klassen Fahrzeug, Motorrad, PKW, Person, Fahrzeughalter und Test. Soweit sogut, Motorrad, PKW erben von Fahrzeug und Fahrzeughalter von Person. Legt man ein Fahrzeug oder einen Halter an, baut man im Konstruktor die Verbindung zum Fahrzeug / zum Halter auf und über Parameter des Konstruktor kann man Typ / Reifenanzahl und / oder Türenanzahl fest legen. Funktioniert alles prima, aber jetzt kommt der Teil, wo ich nicht weiter komme...

Teil 5: Aufgabe Fahrzeug und Fahrzeughalter
Teil a.)
Objekte der Klasse Fahrzeug sind eigentlich sinnlos. Das liegt daran, dass die Klasse
typerscherweise abstrakt zu definieren ist. Machen Sie die Klasse Fahrzeug abstrakt.
Es entfällt auch der Konstruktor. Der Konstruktor der Subklassen muß natürlich
bleiben.
Teil b.)
Lagern Sie alle Methoden der Klasse Fahrzeug in ein Interface aus und
implementieren Sie das Interface in ide Klasse Fahrzeug wieder.
Passen Sie die Anwendung entsprechend an

Ersteinmal der Code von den Klassen:

Java:
 public class Fahrzeug {
	private String typ;
	private int anzahlRäder;
	protected Fahrzeughalter halter;	
	
	  ////////////////////////////////////////////
	 //              Konstruktoren             //
	////////////////////////////////////////////
	
	//Konstruktor 1
	public Fahrzeug(Fahrzeughalter halter, int anzahlRäder)
	{
		this.halter = halter;					//Beziehung zum Halter aufbauen
		this.setAnzahlRäder(anzahlRäder);
		this.typ = "allgemeines Fahrzeug";
		halter.uebernimmt(this);				//Beziehung vom Halter zum Auto

	}
	
	  ////////////////////////////////////////////
	 //            Getter und Setter           //
	////////////////////////////////////////////
	public String getTyp() {
		return typ;
	}

	public void setTyp(String typ) {
		this.typ = typ;
	}

	public int getAnzahlRäder() {
		return anzahlRäder;
	}

	public void setAnzahlRäder(int anzahlRäder) {
		this.anzahlRäder = anzahlRäder;
	}
	

	 public String getHalter() {
		return halter.getVorname() + " "+ halter.getNachname();
	}

	public void setHalter(Fahrzeughalter halter) {
		this.halter = halter;
	}

	////////////////////////////////////////////
	 //                 toString               //
	////////////////////////////////////////////
	public String toString() {
		return typ + " mit " + anzahlRäder + " Rädern";
	}
}




public class Motorrad extends Fahrzeug{
	
	  ////////////////////////////////////////////
	 //          Standardkonstruktor           //
	////////////////////////////////////////////
	public Motorrad()
	{
		this.setAnzahlRäder(2);
		this.setTyp("Motorrad");
		halter.uebernimmt(this);				//Beziehung vom Halter zum Auto
	}
	
	public Motorrad(Fahrzeughalter halter)
	{
		this.setAnzahlRäder(2);
		this.setTyp("Motorrad");
		this.setHalter(halter);					//Beziehung vom Auto zum Halter
		halter.uebernimmt(this);				//Beziehung vom Halter zum Auto
	}
	
	
	  ////////////////////////////////////////////
	 //                toString                //
	////////////////////////////////////////////

	public String toString() {
		return super.toString();		
	}
	
}




public class PKW extends Fahrzeug {

	private int anzahlTüren;

	  ////////////////////////////////////////////
	 //             Konstruktoren              //
	////////////////////////////////////////////
	
	// Standardkonstruktor
	public PKW() {
		this.setAnzahlRäder(4);
		this.setTyp("PKW");
	}

	// Konstruktor 1
	public PKW(int anzahlTüren) {
		this.setAnzahlTüren(anzahlTüren);
		this.setAnzahlRäder(4);
		this.setTyp("PKW");
		halter.uebernimmt(this);				//Beziehung vom Halter zum Auto
	}

	// Konstruktor 2
	public PKW( Fahrzeughalter halter, int anzahlRäder, int anzahlTüren) {
		this.setAnzahlTüren(anzahlTüren);
		this.setAnzahlRäder(anzahlRäder);
		this.setTyp("PKW");
		this.setHalter(halter);
		halter.uebernimmt(this);				//Beziehung vom Halter zum Auto
	}

	  ////////////////////////////////////////////
	 //            Getter und Setter           //
	////////////////////////////////////////////
	public void setAnzahlTüren(int anzahlTüren) {
		this.anzahlTüren = anzahlTüren;
	}

	public int getAnzahlTüren() {
		return anzahlTüren;
	}
	
	  ////////////////////////////////////////////
	 //                toString                //
	////////////////////////////////////////////
	public String toString() {
		return super.toString() +"und " + anzahlTüren + " Türen";
	}
}




public class Person {
	private String vorname;
	private String nachname;
	
	  ////////////////////////////////////////////
	 //             Konstruktoren              //
	////////////////////////////////////////////
	
	//Standardkonstruktor
	public Person(){
		
	}
	
	//Konstruktor 1
	public Person(String vorname, String nachname)
	{
		this.vorname = vorname;
		this.nachname = nachname;
	}
	
	  ////////////////////////////////////////////
	 //           Getter und Setter            //
	////////////////////////////////////////////
	public String getVorname() {
		return vorname;
	}

	public void setVorname(String vorname) {
		this.vorname = vorname;
	}

	public String getNachname() {
		return nachname;
	}

	public void setNachname(String nachname) {
		this.nachname = nachname;
	}
	
	  ////////////////////////////////////////////
	 //               toString                 //
	////////////////////////////////////////////
	public String toString()
	{
		return  vorname+ nachname;
	}
}




public class Fahrzeughalter extends Person {
	
	private Fahrzeug f;
	
	  ////////////////////////////////////////////
	 //             Konstruktoren              //
	////////////////////////////////////////////
	public Fahrzeughalter(String vorname, String nachname){
		this.setVorname(vorname);
		this.setNachname(nachname);
	}
	
	public void uebernimmt(Fahrzeug f){
		this.f = f;
	}

	public Fahrzeug getFahrzeug() {
		return f;
	}

}




public class Test {
	public static void main(String[] args) {
		
		Fahrzeughalter[ ] fzh = new Fahrzeughalter[ ] { new Fahrzeughalter("Riese ",
		"Goliath"), new Fahrzeughalter("Berti ","Vogts"), new Fahrzeughalter("Uwe ",
		"Seeler")};
		Fahrzeug[ ] fz = new Fahrzeug [ ] { new Fahrzeug(fzh[0],16),
		new PKW(fzh[1],4,5),
		new Motorrad(fzh[2])};
		for(int i = 0; i < fzh.length; i++)
		{
		System.out.println("Das Fahrzeug von " + fzh[i] + " ist ein "+
		fzh[i].getFahrzeug()+".");
		}
		for(int i = 0; i < fzh.length; i++)
		{
		System.out.println("Das Fahrzeug ist ein " + fz[i] + ".");
		System.out.println("Es gehört " + fz[i].getHalter()+".");
		}
	}
}

Okay, und mein Problem ist nun, ich versteh nicht wie ich das mit dem Interface realisieren soll?
Wenn ich ein Interface mit den Methoden von Fahrzeug erstelle und dieses implementiere bin ich ja dazu gezwungen in PKW und Motorrad die ganzen Getter / Setter neu zuschreiben, da man ja in diesen dann auch die Methoden des Interfaces braucht, oder? Wie würdet ihr das am besten machen?
 
P

PsychoStyle

Gast
Ja, aber sie erben dann doch auch das Interface mit? Also... dass sie auch den Aufbau des Interfaces benötigen, mit den Methoden, oder? Dann müsste man ja die ganzen Methoden aus Fahrzeug jeweils in PKW / Motorrad kopieren und Fahrzeug wär eigentl. ziemlich sinnlos. Hab ich da nen Denkfehler?
 

Michael...

Top Contributor
Wenn ich ein Interface mit den Methoden von Fahrzeug erstelle und dieses implementiere bin ich ja dazu gezwungen in PKW und Motorrad die ganzen Getter / Setter neu zuschreiben, ...
Nein. Aufgabenstellung ist alle Methoden(rümpfe) aus der Klasse Fahrzeug in ein Interface aus zulagern. Die abstrakte Klasse Fahrzeug implementiert dieses Interface.
Einzelne Methoden werden dabei konkret implementiert anderer abstract --> alle von Fahrzeug erbenden Klassen müssen nur noch die abstrakten Methoden implementieren.
 
P

PsychoStyle

Gast
Gut, danke! Ich versuch mich mal dran.

Also, wenn eine Klasse von einer Klasse erbt, die ein Interface implementiert hat, wird das Interface nicht weitervererbt? ^^
 

Michael...

Top Contributor
Also, wenn eine Klasse von einer Klasse erbt, die ein Interface implementiert hat, wird das Interface nicht weitervererbt? ^^
Doch, dadurch dass die Superklasse das Interface implementiert, wird es auch an die Kindklassen indirekt weiter"vererbt".
Wenn das Interface in der Superklasse bereits konkret implementiert ist, müssen das die Kindklassen nicht noch einmal tun. Das ist ja dann eine gewöhnliche Vererbung.
 
P

PsychoStyle

Gast
Doch, dadurch dass die Superklasse das Interface implementiert, wird es auch an die Kindklassen indirekt weiter"vererbt".


Ja aber genau das ist ja mein Problem, denn wenn das Interface weitervererbt wird, muss ich in PKW / Motorrad nun die Methoden schreiben, die vorher nur in Fahrzeug waren und ich benutzen konnte, da sie vererbt wurden und nun brauchen die Klassen die Methoden auch, da sie sich ja an die Struktur des Interfaces halten?!

The type Motorrad must implement the inherited abstract method FahrzeugInterface.Fahrzeug(Fahrzeughalter, int)
Quick fix: add unimplemented Methods

Tut mir leid, wenn ich mich gerade dumm anstelle...
 

Michael...

Top Contributor
In folgendem Bsp. werden im Interface drei Methode definiert. Die abstrakte Klasse implementiert dieses Interface. (Da sie abstract ist muss sie aber die Methoden nicht unbedingt implementieren)
Die Methode setName(...) wird konkret implementiert, setMethode2(...) wird gar nicht implementiert und setMethode3(...) wird als abstract Methode implementiert (macht jetzt nicht unbedingt Sinn).

Die Klasse Motorrad (erbt von Fahrzeug) kann (ohne eigene Implementierung) die Methode setName(...) verwenden, muss aber die beiden anderen Methoden, die von Fahrzeug nicht bzw. nur abstract implementiert wurden, selbst implementieren.

Java:
interface FahrzeugInterface {
	public void setName(String name);
	public void setMethode2(String some);
	public void setMethode3(String some);
}

abstract class Fahrzeug implements FahrzeugInterface {
	private String name;
	
	public void setName(String name) {
		this.name = name;
	}
	
	public abstract void setMethode3(String some);
}

class Motorrad extends Fahrzeug {
	public void setMethode2(String some) {
		// TODO ...
	}

	@Override
	public void setMethode3(String some) {
		// TODO ...
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kirby.exe Frage zur Verwendung von Interfaces Java Basics - Anfänger-Themen 6
H Frage zu interfaces Java Basics - Anfänger-Themen 1
Hijo2006 Frage zu Interfaces Java Basics - Anfänger-Themen 21
D Frage bzgl. Interfaces Java Basics - Anfänger-Themen 10
M Frage zu Generics in Klassen, Abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
M Frage zu Interfaces Java Basics - Anfänger-Themen 3
K Theor. Frage zu Interfaces Java Basics - Anfänger-Themen 30
T Frage zu Interfaces und Abstrakten Klassen Java Basics - Anfänger-Themen 4
I Frage zu Collection und List Interfaces Java Basics - Anfänger-Themen 2
N Frage zu Interfaces (in Bezug auf Mehrfachvererbung) Java Basics - Anfänger-Themen 3
T Frage zu Interfaces Java Basics - Anfänger-Themen 7
G Frage zu Java und Interfaces Java Basics - Anfänger-Themen 7
Zrebna Frage zu Test-Driven Development (TDD) Java Basics - Anfänger-Themen 3
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
I Frage Thymeleaf -> Prefix / Suffix ändern? Java Basics - Anfänger-Themen 11
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
T Frage zu Parse Java Basics - Anfänger-Themen 2
H Frage an die Profis Java Basics - Anfänger-Themen 4
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
P Frage zu Rekursion und Backtracking Java Basics - Anfänger-Themen 2
H Frage zur Ausgabe Java Basics - Anfänger-Themen 4
H Frage zu arithmetischen Operationen Java Basics - Anfänger-Themen 20
F Kurze Frage zu replace() Java Basics - Anfänger-Themen 19
JavaSchmecktLecker Polymorphie Frage zur Methodenüberschreibung Java Basics - Anfänger-Themen 21
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
B Erste Schritte Frage zu Instanzierung und Referenzen Java Basics - Anfänger-Themen 8
DoubleM Runtime.getRuntime().exec Frage Java Basics - Anfänger-Themen 2
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
O Frage: Formaler Typbezeichner? Java Basics - Anfänger-Themen 3
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
N Spezielle frage zum Comparator Java Basics - Anfänger-Themen 6
L Frage zum Array Java Basics - Anfänger-Themen 1
A Frage zum UML Design Java Basics - Anfänger-Themen 1
I Hilfe bei Klausur Frage Java Basics - Anfänger-Themen 8
izoards Drucken Frage zu FAQ Beitrag Java Basics - Anfänger-Themen 2
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
A OCA Study Guide: 2. Frage aus Kapitel 3 Java Basics - Anfänger-Themen 9
sserio Date Library Frage Java Basics - Anfänger-Themen 9
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
sserio Frage zu HashMaps Java Basics - Anfänger-Themen 20
sserio Frage zu Threading - Multithreading Java Basics - Anfänger-Themen 2
sserio Frage zu Lambda Ausdrücken Java Basics - Anfänger-Themen 7
sserio Frage zu BigInteger Java Basics - Anfänger-Themen 1
D Frage bzgl. Enum-Handhabung Java Basics - Anfänger-Themen 16
xxx12 Frage Java Basics - Anfänger-Themen 2
I Generelle Frage zu Mikroservices (Spring Boot?), Docker... Java Basics - Anfänger-Themen 7
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
A Frage zur programmierung Java Basics - Anfänger-Themen 12
M Frage zur Methode split der Klasse String Java Basics - Anfänger-Themen 32
R Input/Output Frage zu Java IO Java Basics - Anfänger-Themen 6
M Frage zu printWriter Java Basics - Anfänger-Themen 5
C Frage zu OLSMultipleLinearRegression Java Basics - Anfänger-Themen 31
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Verständnis-Frage zu einer HÜ? Java Basics - Anfänger-Themen 1
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
L Frage zur Ticket Maschine Java Basics - Anfänger-Themen 1
J Frage zu OOP-Klassendiagramm Java Basics - Anfänger-Themen 8
OSchriever Frage zu Compiler Java Basics - Anfänger-Themen 8
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
F Frage betreff Programmierbücher zu Lagerverwaltung als Konsolenprogramm Java Basics - Anfänger-Themen 3
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
I String.split regex Frage Java Basics - Anfänger-Themen 2
N Best Practice Frage zum MVC-Pattern Java Basics - Anfänger-Themen 2
dieter000 Frage zu einem Beispiel... Java Basics - Anfänger-Themen 5
J Frage zum Loggen Java Basics - Anfänger-Themen 18
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
Zrebna Frage zum "Referenzen-konzept" in Java Java Basics - Anfänger-Themen 8
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
marcooooo Frage zu bestimmten Beispiel Java Basics - Anfänger-Themen 31
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
B Erste Schritte Learning Coding (!) Frage an erfahrene Programmierer. Java Basics - Anfänger-Themen 23
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
C Exception-Frage Java Basics - Anfänger-Themen 3
J Eine Frage zur Schreibweise == ? : Java Basics - Anfänger-Themen 3
S Frage des Designs Java Basics - Anfänger-Themen 1
JavaTalksToMe Extends/Implements Frage Java Basics - Anfänger-Themen 3
pkm Frage zu Servletfunktion Java Basics - Anfänger-Themen 0
B Frage zur Währungsumrechnung Java Basics - Anfänger-Themen 3
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
L Wie frage ich ab, ob in einem Array, Werte doppelt vorkommen? Java Basics - Anfänger-Themen 4
D Frage zur IDE IntelliJ IDEA Java Basics - Anfänger-Themen 6
H Frage zum 2d Array Java Basics - Anfänger-Themen 1
N Frage zum Newton-Fraktal Java Basics - Anfänger-Themen 1
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
I Frage zu SkipList Java Basics - Anfänger-Themen 4
G Frage zu JScrollPane Java Basics - Anfänger-Themen 12
Kirby.exe Allgemeine Frage Java Basics - Anfänger-Themen 3
W Frage zu anonymen Klassen Java Basics - Anfänger-Themen 4
J Kleine Frage zu OOP Java Basics - Anfänger-Themen 371
S Frage Klasse und Objekte Java Basics - Anfänger-Themen 2
F Frage zu Iteratoren Java Basics - Anfänger-Themen 2
C Erste Schritte Frage zur ArrayList Java Basics - Anfänger-Themen 15
J Frage zur Vererbung Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben