Geht so was? public void verkaufe (<X implements Produkt&

Status
Nicht offen für weitere Antworten.

TSH

Bekanntes Mitglied
Der Titel ist etwas schräg. Ich weiss leider nicht den Namen für mein Problem. Ich schildere es einmal an einem Beispiel:

Ich habe ein Interface "Geschaeft" und mehrere Klassen

Baeckerei implements Geschaeft
Metzgerei implements Geschaeft
...

Zusätzlich ein Interface "Produkt":

Backware implements Produkt
Schnitzel implements Produkt

Jetzt möchte ich im Interface Geschaeft festlegen, dass die implementierenden Klassen bitteschön eine Methode anbieten müssen, um ihre Produkte zu verkaufen.

Erster Versuch:

Code:
Im Interface Geschaeft:
public void verkaufe(Produkt p);

In der Klasse Baeckerei:
public void verkaufe(Produkt p) {
...
}
Will ich nicht. Die Bäckerei soll sich schon auf Backwaren (und nicht Schnitzel) spezialisieren dürfen, also

Zweiter Versuch:
Code:
Im Interface Geschaeft:
public void verkaufe(Produkt p);

In der Klasse Baeckerei:
public void verkaufe(Backware b) {
...
}
Backware implementiert zwar Produkt, aber mein Compiler sieht das Interface Geschaeft nun nicht mehr als von der Baeckerei erfüllt an. Gibt es ein Konstrukt a la
Code:
Im Interface Geschaeft:
public void verkaufe(<X implementiert Produkt> p);

??? Würde mich über Antworten freuen!
 
S

SlaterB

Gast
interface Geschaeft<P implements Produkt> { // oder P extends Produkt, ausprobieren

public void verkaufe(P p);

}

class Baeckerei implements Geschaeft<Backware> {

..

}
 

TSH

Bekanntes Mitglied
Hm, danke aber:

implements ergibt einen Syntax error und extends führt immer noch dazu, dass
Code:
Baeckerei.verkaufe(Backware b)
nicht als Implementierung von
Code:
Geschaeft.verkaufe(Produkt p)
anerkannt wird. :-(

Hab's so:
Code:
public interface Geschaeft<p extends Produkt> {
  public void verkaufe(Produkt p);
}

public class Baeckerei implements Geschaeft<Backware> {
  public void verkaufe(Backware b) {
    ... // Compiler meckert, da ich keine Produkte verkaufe
  }
}

public class Metzgerei implements Geschaeft<Schnitzel> {
  public void verkaufe(Schnitzel s) {
    ...
  }
}
 
S

SlaterB

Gast
wie sieht denn die Backware-Klasse aus?
im Zweifel muss es aber jemand anders beantworten, habe gerade kein Programm zur Verfügung

edit:

public interface Geschaeft<p extends Produkt> {
public void verkaufe(Produkt p);
}

ist aber auch nicht das was ich geschrieben habe!, da hast du ja als Parametertyp in verkaufe Produkt, nicht den generischen Klassenparameter p,

public void verkaufe(p p);

was zeigt, wie schlecht ein Kleinbuchstabe als generischer Parameter ist
 

TSH

Bekanntes Mitglied
Ah danke! Mit

Code:
 Geschaeft<P implements Product> und
verkaufe(P produkt);
Klappt es! Vielen Dank.
 

TSH

Bekanntes Mitglied
Jetzt habe ich doch noch eine Frage: Viele Methoden sind ja bei Metzgerei, Baeckerei usw. ähnlich. Meine Idee ist jetzt eine gemeinsame abstrakte Oberklasse AbstraktesGeschaeft, welche Methoden kapselt. Beispiel: Produkte haben immer einen Preis. Also kann ich die Methode printPreis() ja eigentlich kapseln, oder?

Aber wie krieg ich es so generisch hin, dass Baeckereien ihre Backwaren und Metzgereien ihre Schnitzel auszeichnen? Es sieht jetzt so aus:

Code:
public interface Geschaeft<P extends Produkt> { 
  public void verkaufe(P p); 
  public void printPreis();  
} 

public interface Produkt {
  public double getPreis();
}

public abstract class AbstraktesGeschaeft implements Geschaeft<???> { 

  public void verkaufe(???) { 
    // Was soll hier getan werden? 
    // Produkte verkaufen und nachher überschreiben?
    // Kann man überschreiben hier erzwingen?
  } 

  public void zeichneAus();  
    // Ich würde die Methode gerne so generisch schreiben, dass 
    // System.out.println("Preis: " + ???.getPreis());
    // mit dem jeweiligen Typ funktioniert.
} 


public class Baeckerei extends AbstraktesGeschaeft implements Geschaeft<Backware> { 
  public void verkaufe(Backware b) { 
    ...
  } 
} 

public class Metzgerei extends AbstraktesGeschaeft  implements Geschaeft<Schnitzel> { 
  public void verkaufe(Schnitzel s) { 
    ... 
  } 
}
Ich hoffe, ich konnte das einigermaßen rüberbringen. Mir fehlen halt die ???
 

Marco13

Top Contributor
Du kannst dem AbstraktenGeschäft schon einen Typ geben.

Meintest du sowas wie ....
Code:
class GeschaeftTest
{
    public static void main(String args[])
    {
        Geschaeft<Backware> g0 = new Baeckerei();
        g0.verkaufe(new Backware());
        g0.zeichneAus(new Backware());

        Geschaeft<Schnitzel> g1 = new Metzgerei();
        g1.verkaufe(new Schnitzel());
        g1.zeichneAus(new Schnitzel());

    }

}


interface Geschaeft<P extends Produkt> {
  public void verkaufe(P p);
  //public void printPreis();
  public void zeichneAus(P p);
}

interface Produkt {
  public double getPreis();
}

class Backware implements Produkt
{
    public double getPreis() { return 123; }
}
class Schnitzel implements Produkt
{
    public double getPreis() { return 456; }
}


abstract class AbstraktesGeschaeft<P extends Produkt> implements Geschaeft

 {

  public void verkaufe(P p) {
      System.out.println("Verkaufe "+p);
    // Was soll hier getan werden?
    // Produkte verkaufen und nachher überschreiben?
    // Kann man überschreiben hier erzwingen?
  }

  public void zeichneAus(P p)
  {
      System.out.println("ZeichneAus "+p.getPreis());
    // Ich würde die Methode gerne so generisch schreiben, dass
    // System.out.println("Preis: " + ???.getPreis());
    // mit dem jeweiligen Typ funktioniert.
  }
}


class Baeckerei extends AbstraktesGeschaeft<Backware> implements Geschaeft<Backware> {
  public void verkaufe(Backware b) {
    //...
  }
}

class Metzgerei extends AbstraktesGeschaeft<Schnitzel>  implements Geschaeft<Schnitzel> {
  public void verkaufe(Schnitzel s) {
    //...
  }
}
!?


im Prinzip braucht man dann nicht mehr
class Baeckerei extends AbstraktesGeschaeft<Backware> implements Geschaeft<Backware> {
zu schreiben - es würde auch
class Baeckerei extends AbstraktesGeschaeft<Backware> {
reichen. Aber das ist wohl nicht sooo wichtig.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
P Netbeans installation geht nicht Java Basics - Anfänger-Themen 26
Ostkreuz wie geht der catch? Java Basics - Anfänger-Themen 3
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
Say Stelle in Code herausfinden, wie geht man vor? Java Basics - Anfänger-Themen 12
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
P Installation JRE 8u321 startet, geht aber nicht weiter Java Basics - Anfänger-Themen 1
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
E Pervasive PSQL insert funktion geht nicht Java Basics - Anfänger-Themen 9
U Warum kann ich die Methode in der ENUM Klasse nicht aufrufen? Und warum geht die Switch nicht? Java Basics - Anfänger-Themen 8
H Wie geht eigentlich Objektorientierung? Java Basics - Anfänger-Themen 14
M Methoden Wert einer Variable geht verloren? Java Basics - Anfänger-Themen 6
melisax Lower & Uppercase Beispielprogramm geht nicht Java Basics - Anfänger-Themen 3
MarcKKKK123 Wie geht das? Java Basics - Anfänger-Themen 1
B Static Attribute in einer Klasse, wie geht das? :O Java Basics - Anfänger-Themen 19
N methodenaufruf for each geht nicht Java Basics - Anfänger-Themen 2
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
W App geht live und dann? Java Basics - Anfänger-Themen 9
P Geht es vielleicht viel kürzer? Java Basics - Anfänger-Themen 7
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
K Erste Schritte Programm geht aus Schleife, warum? Java Basics - Anfänger-Themen 2
S Geht das bei Java ? Java Basics - Anfänger-Themen 11
L Wie geht man bei mehreren Action Klassen vor? Java Basics - Anfänger-Themen 0
C unverständlicher Code Attribute ohne Datentyp, wie geht das? Java Basics - Anfänger-Themen 8
B OCR - Rechnungserkennung, wie geht das genau? Java Basics - Anfänger-Themen 59
CptK Klassen KeyListner geht nicht Java Basics - Anfänger-Themen 7
L Klassen Objekt aus einer Warteschlange in eine andere übergeben, geht nicht? Java Basics - Anfänger-Themen 6
K Armstrong Programm geht nur bis 1000, aber nicht weiter Java Basics - Anfänger-Themen 2
M Nim-Spiel geht in den negativen Bereich Java Basics - Anfänger-Themen 1
amazinglife77 Input/Output Lesen/Schreiben Properties: in eclipse geht, als JAR nicht Java Basics - Anfänger-Themen 4
V Erste Schritte Warum geht meine continue Anweisung nicht? Java Basics - Anfänger-Themen 8
MR._FIRE_Flower String.split("(") geht nicht Java Basics - Anfänger-Themen 4
M Restbuchwert Berechnung geht nicht Java Basics - Anfänger-Themen 45
K Klassen Nachträglich ein Objekt einem anderen zuweisen, geht das? Java Basics - Anfänger-Themen 2
S int addieren geht nicht Java Basics - Anfänger-Themen 13
L system.print.out geht nicht Java Basics - Anfänger-Themen 11
M Referenz geht bei Zwischenspeichern verloren (ArrayList) Java Basics - Anfänger-Themen 4
S Komma geht beim Schreiben ins csv verloren. Java Basics - Anfänger-Themen 6
M Arrays einspeichern geht nicht Java Basics - Anfänger-Themen 21
J BlueJ und import-Anweisungen, wie geht das? Java Basics - Anfänger-Themen 4
J Geht mit Java überhaupt was? Java Basics - Anfänger-Themen 13
J Debuggen - wie geht das? Java Basics - Anfänger-Themen 6
I erstelle Vorschaubild mit der lib PDF-Renderer und möchte danach Dateiname ändern -> geht aber nicht Java Basics - Anfänger-Themen 0
J Ausführen geht nicht Java Basics - Anfänger-Themen 19
G System.out.printf geht nicht Java Basics - Anfänger-Themen 6
E Erste Schritte [Noob] Warum geht meine For-Schleife nicht? Java Basics - Anfänger-Themen 2
I Java Code so gut es geht Kommentieren Java Basics - Anfänger-Themen 4
S Button "Berechnen" geht nicht Java Basics - Anfänger-Themen 3
B Compiler-Fehler Ein Java-Eclipse-Anfänger geht auf Reisen... Java Basics - Anfänger-Themen 10
K JUnit: Objekte von eigenen Klassen vergleichen...geht nicht Java Basics - Anfänger-Themen 5
T fianl array geht nicht... Java Basics - Anfänger-Themen 2
O if and else geht nur manchmal Java Basics - Anfänger-Themen 17
B Nichts geht mehr Java Basics - Anfänger-Themen 10
D Java geht auf windows 64 bit nicht. Java Basics - Anfänger-Themen 5
V Einfacher vergleich von Arrays geht schief Java Basics - Anfänger-Themen 2
T sample.war geht nicht... Java Basics - Anfänger-Themen 1
Thallius Klassen aus Classname programmatisch erzeugen. Wie geht das in java? Java Basics - Anfänger-Themen 5
C Datentypumwandlung geht nicht Java Basics - Anfänger-Themen 5
U kompilieren geht nicht wg. Formatierung wahrscheinlich Java Basics - Anfänger-Themen 7
G While schleife mit 2 Bedingungen geht nicht! Java Basics - Anfänger-Themen 15
S Methoden Rückgabewert einer Methode als Parameter an eine andere Methode übergeben, geht das? Java Basics - Anfänger-Themen 5
L Das erste Mal GridBagLayout - wie geht das? Java Basics - Anfänger-Themen 5
O Jar Datei erstellen geht nicht. Java Basics - Anfänger-Themen 4
O (.+?) --> $1 geht nicht Java Basics - Anfänger-Themen 5
V relativer Pfad geht nicht, absolut schon? Java Basics - Anfänger-Themen 3
R Java JDK/ Kompiler geht nicht Java Basics - Anfänger-Themen 4
H Geht dieser Code noch einfacher (try catch finally) Java Basics - Anfänger-Themen 7
P Geht dieser Code noch einfacher? Java Basics - Anfänger-Themen 16
J Warum geht int und String nicht? Java Basics - Anfänger-Themen 18
J repaint() geht gar nicht; GUI aktualisieren Java Basics - Anfänger-Themen 10
N ArrayList geht nicht Java Basics - Anfänger-Themen 8
B Erste Schritte Listing aus Buch - wie geht das? Java Basics - Anfänger-Themen 6
K Datentypen Kurzform Addition geht, Langform scheitert am Typen Java Basics - Anfänger-Themen 6
R Einfacher Timer geht nicht Java Basics - Anfänger-Themen 7
J Anzeige erneuern, wie geht das? Java Basics - Anfänger-Themen 6
D Compiler-Fehler ANT-Script geht nicht Java Basics - Anfänger-Themen 6
A Android Datenbank gaaanz einfaches Insert geht nicht - warum? Java Basics - Anfänger-Themen 4
N JAVA Installation - Umgebungsvariable geht nicht. Java Basics - Anfänger-Themen 3
K Aus JFrame-Fenster SuM-Fenster öffnen geht nicht! Java Basics - Anfänger-Themen 8
L Jarfiles packen, wie geht's genau? Java Basics - Anfänger-Themen 12
K Erste Schritte Progressbar geht nicht Java Basics - Anfänger-Themen 5
H Ein alternativer Konstruktor geht nicht Java Basics - Anfänger-Themen 3
B Std-Serialisierung - Speichern/Laden geht nur auf einem Rechner Java Basics - Anfänger-Themen 17
F Geht in alle Case rein, warum?? Java Basics - Anfänger-Themen 12
El_Lobo Methoden Zu viele Getter- und Settermethoden - geht das einfacher? Java Basics - Anfänger-Themen 3
P quickSort eines Objekt-Arrays geht nicht! Java Basics - Anfänger-Themen 11
M if then else geht nicht Java Basics - Anfänger-Themen 10
N Methoden mehrere replace hintereinander geht nicht ? Java Basics - Anfänger-Themen 2
Maxim6394 KeyListener geht nicht Java Basics - Anfänger-Themen 15
C Erste Schritte switch Anweisung geht nicht Java Basics - Anfänger-Themen 3
N geht oder geht nicht? Java Basics - Anfänger-Themen 24
E bo wie geht das denn? Java Basics - Anfänger-Themen 8
Z Anfügen an Arraylist geht nicht Java Basics - Anfänger-Themen 3
M Unterverzeichnisse löschen geht nicht. Java Basics - Anfänger-Themen 3
T Methoden Array kopieren: Wie geht das? Java Basics - Anfänger-Themen 20
M If Abfrage geht nicht Java Basics - Anfänger-Themen 2
0 file.delete() geht nicht Java Basics - Anfänger-Themen 23

Ähnliche Java Themen

Neue Themen


Oben