Hallo allerseits,
um Interfaces zu verstehen, habe ich versucht ein maximal _einfaches_ Beispiel zu konstruieren, in dem ein Interface und Polymorphie vorkommt.
Beispiel:
1) Eine Firma stellt verschiedene Produkte her:
Radios, Telefone, Ballerspiele.
Konkret:
Die Klassen Radio, Telefon, Ballerspiel sind Unterklassen der Klasse Produkt.
Die Klassen Radio und Telefon besitzen im Gegensatz zu der Klasse Ballerspiel das Attribut farbe. Ballerspiel besitzt im Gegensatz zu Produkt das Attribut dateigrösse.
Die Klasse Produkt besitzt das Attribut name.
Jede dieser Klasse soll auch die Methode getBeschreibung() besitzen, die die jeweiligen Attribute der Klasse (zu Testzwecken) auf dem Bildschirm ausgibt.
Um Polymorphie zu demonstrieren, kann man ein paar Radios, Telefone und Ballerspiele in das Array produkte[] mit dem Datentyp Produkt abspeichern und mit getBeschreibung() die Werte der Attribute dieser Radios, Telefone und Ballerspiele auf dem Bildschirm ausgeben.
So weit so gut.
2)
Um ein Interface zu „motivieren“ habe ich folgendes gemacht:
In dem Interface GegenstandIF wird die Methode getFarbe() deklariert.
Die Klassen Radio und Telefon implementieren dieses Interface GegenstandIF
Um Polymorphie zu demonstrieren, kann man ein paar Radios und Telefone in das Array gegenstaende [] mit dem Datentyp GegenstandIF abspeichern und mit getFarbe() die Werte der Attribute dieser Radios und Telefone auf dem Bildschirm ausgeben.
Man kann damit zwar Interface und Polymorphie demonstrieren, doch habe ich mit dem Beispiel ein Problem:
Ich kann in der Schleife, die aus dem Array gegenstande[] die Farbe der Radios und Telefone (mit getFarbe()) ausliest nicht auch noch den Namen der Produkte ausgeben.
Kann mir jemand mein Beispiel so abändern, dass es sinnvoller wird ?
Mit freundlichen Grüßen
Ernst
um Interfaces zu verstehen, habe ich versucht ein maximal _einfaches_ Beispiel zu konstruieren, in dem ein Interface und Polymorphie vorkommt.
Beispiel:
1) Eine Firma stellt verschiedene Produkte her:
Radios, Telefone, Ballerspiele.
Konkret:
Die Klassen Radio, Telefon, Ballerspiel sind Unterklassen der Klasse Produkt.
Die Klassen Radio und Telefon besitzen im Gegensatz zu der Klasse Ballerspiel das Attribut farbe. Ballerspiel besitzt im Gegensatz zu Produkt das Attribut dateigrösse.
Die Klasse Produkt besitzt das Attribut name.
Jede dieser Klasse soll auch die Methode getBeschreibung() besitzen, die die jeweiligen Attribute der Klasse (zu Testzwecken) auf dem Bildschirm ausgibt.
Um Polymorphie zu demonstrieren, kann man ein paar Radios, Telefone und Ballerspiele in das Array produkte[] mit dem Datentyp Produkt abspeichern und mit getBeschreibung() die Werte der Attribute dieser Radios, Telefone und Ballerspiele auf dem Bildschirm ausgeben.
So weit so gut.
2)
Um ein Interface zu „motivieren“ habe ich folgendes gemacht:
In dem Interface GegenstandIF wird die Methode getFarbe() deklariert.
Die Klassen Radio und Telefon implementieren dieses Interface GegenstandIF
Um Polymorphie zu demonstrieren, kann man ein paar Radios und Telefone in das Array gegenstaende [] mit dem Datentyp GegenstandIF abspeichern und mit getFarbe() die Werte der Attribute dieser Radios und Telefone auf dem Bildschirm ausgeben.
Man kann damit zwar Interface und Polymorphie demonstrieren, doch habe ich mit dem Beispiel ein Problem:
Ich kann in der Schleife, die aus dem Array gegenstande[] die Farbe der Radios und Telefone (mit getFarbe()) ausliest nicht auch noch den Namen der Produkte ausgeben.
Kann mir jemand mein Beispiel so abändern, dass es sinnvoller wird ?
Mit freundlichen Grüßen
Ernst
Java:
package sinninterface15;
public interface GegenstandIF {
void setFarbe(int pFarbe);
int getFarbe();
}
Java:
package sinninterface15;
public class MainSinnInterface15 {
public static void main(String[] args) {
int i;
Produkte produkte[];
GegenstandIF gegenstaende[];
produkte = new Produkte[3];
gegenstaende = new GegenstandIF[2];
produkte[0] = new Radio("RadioVatikan", 120);
gegenstaende[0] = new Radio("RadioHoliday", 12);
produkte[1] = new Telefon ("Teletron", 321);
gegenstaende[1] = new Telefon ("Urlaubstelefon", 3);
produkte[2] = new Ballerspiel("BallerinaI", 30);
System.out.println("Beschreibung der Gegenstaende:");
for(i=0;i<3;i++){
System.out.println(produkte[i].getBeschreibung());
}
System.out.println("\nFarbe der Gegenstaende:");
for(i=0;i<2;i++){
System.out.println("Farbe="+gegenstaende[i].getFarbe());
}
}
}
abstract class Produkte{
protected String name;
public Produkte(String pName){
name = pName;
}
public String getName(){
return(name);
}
abstract public String getBeschreibung();
}
class Telefon extends Produkte implements GegenstandIF{
int farbe;
public Telefon(String pName, int pFarbe){
super(pName);
farbe = pFarbe;
}
public String getBeschreibung(){
String s;
s="Produktname="+name+" Produktfarbe="+farbe;
return s;
}
public void setFarbe(int pFarbe){
farbe = pFarbe;
}
public int getFarbe(){
return farbe;
}
}
class Radio extends Produkte implements GegenstandIF{
private int farbe;
public Radio(String pName, int pFarbe){
super(pName);
farbe = pFarbe;
}
public String getBeschreibung(){
String s;
s="Produktname="+name+" Produktfarbe="+farbe;
return s;
}
public void setFarbe(int pFarbe){
farbe = pFarbe;
}
public int getFarbe(){
return farbe;
}
}
class Ballerspiel extends Produkte{
private int dateigroesse;
Ballerspiel(String pName, int pDateigroesse){
super(pName);
dateigroesse = pDateigroesse;
}
public String getBeschreibung(){
String s;
s="Produktname="+name+" Dateigroesse="+dateigroesse;
return s;
}
public double getDateigroesse(){
return dateigroesse;
}
}