Interface-Frage

pg1337

Bekanntes Mitglied
Sers liebe Community.

Ich habe eine Methode endPreis() mit der der Endpreis berechnet wird:

Java:
public double endPreis(){
		
		double result= 0.0;
		
		if (lieferung.equals("schnell")) {
		result = einkaufswagen.gesamtPreis() * 1.03;
		} else if(lieferung.equals("standard")) {
			result = einkaufswagen.gesamtPreis() + 3;
		} else if(lieferung.equals("overnight")) {
			result = einkaufswagen.gesamtPreis() * 1.05;
		} else {
			System.out.println("Lieferart nicht vorhanden!\nFolgende Lieferarten verfügbar: standard, schnell, overnight");
		}
		return result;
	}


Nun möchte ich jedoch lieber 3 Klassen erstellen (SchnelleLieferung{}, StandardLieferung{} und OvernightLieferung{}) die alle ein Interface mit der Methode endPreis() implementieren aus einem neuen Interface:

Java:
public interface Lieferung {
	
	double result= 0.0;
	
	public double endPreis();

}

Ich weiß nicht wie ich das machen soll.. Was kommt in die 3 Klassen rein? implements Lieferung... ist klar, nur dann?

Regards
 

faetzminator

Gesperrter Benutzer
Java:
public class SchnelleLieferung implements Lieferung {
    public double endPreis() {
       return einkaufswagen.gesamtPreis() * 1.03;
    }
}
Etc...
 

pg1337

Bekanntes Mitglied
Java:
public class SchnelleLieferung implements Lieferung {
    public double endPreis() {
       return einkaufswagen.gesamtPreis() * 1.03;
    }
}
Etc...


Das sieht schonmal gut aus, Problem ist nur ich kann auf "einkaufswagen." nicht in dieser Klasse direkt zugreifen, da einkaufswagen ein Objekt einer Klasse Einkaufswagen ist.

Regards

Edit:

Habe das so gedacht:

Java:
public class SchnelleLieferung implements Lieferung {
	
	private Einkaufswagen einkaufswagen;
	
	public SchnelleLieferung(Einkaufswagen einkaufswagen) {
		super();
		this.einkaufswagen = einkaufswagen;
}

	@Override
	public double endPreis() {
		return einkaufswagen.gesamtPreis()*1.03;
	}
	
	

}

Aber funkt nicht.
 
Zuletzt bearbeitet:

pg1337

Bekanntes Mitglied
SlaterB, das Programm funktioniert einwandfrei jetzt (Übung Online Shop). es geht mir nur drum dass ich die Methode endPreis() in ein Interface auslagern will und 3 neue Klassen erstelle für die verschiedenen Lieferarten.

Allerdings kann ich ja nicht von der neuen Klasse auf das einkaufswagen-Objekt zugreifen.

Fehler: einkaufswagen cannot be resolved.

Der Einkaufswagen wurde in der Klasse Test definiert:
Java:
Einkaufswagen einkaufswagen= new Einkaufswagen();
		einkaufswagen.addArtikel(laptop, 5);
		einkaufswagen.addArtikel(dvdPlayer, 2);
		einkaufswagen.addArtikel(fernseher, 1);

Geht mir nur drum wie ich die Methode endPreis() in ein Interface auslagern kann (Ich auf das Objekt einkaufswagen zugreifen kann???:L), auf das 3 Klassen dann zugreifen können, sprich SchnelleLieferung-Klasse, StandardLieferung-Klasse und OvernightLieferung-Klasse.

Gruß
 

ARadauer

Top Contributor
[qoute]Fehler: einkaufswagen cannot be resolved.[/qoute]
oder
[qoute]Fehler: Einkaufswagen cannot be resolved.[/qoute]
Was fehlt dir die Variable oder die Klasse

Der Einkaufswagen wurde in der Klasse Test definiert:
Aber du hast schon eine Klasse Einkaufswagen oder?

und in Test machst du dann ein
SchnelleLieferung sl = new SchnelleLieferung (einkaufswagen);


das muss gehen...
zeig mal den ganzen Code
 
S

SlaterB

Gast
gemeckert wurde schon wieder, eine Fehlermeldung ohne Code dazu ist fast sinnlos,
aber immerhin noch ein komplett lauffähiges Programm dazu:

Java:
public class Test
{
    public static void main(String[] args)
    {
        Einkaufswagen einkaufswagen = new Einkaufswagen();
        Lieferung l = new SchnelleLieferung(einkaufswagen);
        System.out.println(l.endPreis());
    }
}


class Einkaufswagen
{
    double gesamtPreis()
    {
        return 2;
    }
}


interface Lieferung
{
    public double endPreis();
}


class SchnelleLieferung
    implements Lieferung
{

    private Einkaufswagen einkaufswagen;

    public SchnelleLieferung(Einkaufswagen einkaufswagen)
    {
        super();
        this.einkaufswagen = einkaufswagen;
    }

    public double endPreis()
    {
        return einkaufswagen.gesamtPreis() * 1.03;
    }

}
Ausgabe: 2.06
 

pg1337

Bekanntes Mitglied
Java:
SchnelleLieferung sl = new SchnelleLieferung (einkaufswagen);

Das wars was gefehlt hat, jetzt funktionierts!
Vielen Dank :).

Ich lasse das mal kurz noch als "unerledigt" weil ich schnell einkaufen gehen muss..*Welch Zufall mit einkaufswagen :D* , dann probier ichs und schreibe hier nochmal rein falls n Fehler kommt und wenn nicht dass es funkt.

Danke an Alle, echt n klasse Forum hier!
 

pg1337

Bekanntes Mitglied
Die Klasse Test (Eine von 4 Klassen vom Ausgangsprogramm), in der die Main Methode seinen Sitz hat sieht so aus:

Java:
import java.util.List;


public class Test {
	
	

	public static void main(String[] args)
	{
		
		Artikel laptop= new Artikel("Neu", 500,"5");
		Artikel dvdPlayer= new Artikel(null, 100, null);
		Artikel fernseher= new Artikel(null, 300, null);
	
		Einkaufswagen einkaufswagen= new Einkaufswagen();
		einkaufswagen.addArtikel(laptop, 5);
		einkaufswagen.addArtikel(dvdPlayer, 2);
		einkaufswagen.addArtikel(fernseher, 1);	
		
		SchnelleLieferung sl = new SchnelleLieferung (einkaufswagen);
		
		Bestellung bestellung= new Bestellung(einkaufswagen, "schnell");
		
		System.out.println("Gesamtpreis der Artikel im Warenkorb:  " + Math.round(einkaufswagen.gesamtPreis()) + " €");
		System.out.println("Gesamtpreis der Artikel bei Lieferung: " + Math.round(bestellung.endPreis()) + " €");
		
		List<Artikel> artikel= einkaufswagen.getEinkaeufe();
		for(Artikel a:artikel) {
			System.out.println("Preis: " + a.getPreis());
		}
		
	}	
}


Greetz
 

faetzminator

Gesperrter Benutzer
Ich denke, dass in der Klasse [c]Bestellung[/c] anhand des String (hier [c]"schnell"[/c]) die jeweilige Lieferung erstellt werden soll. Dann kannst du das dort in [c]endPreis()[/c] implementieren.
 
S

SlaterB

Gast
spitzfindig:
> SchnelleLieferung sl = new SchnelleLieferung (einkaufswagen);
> Das wars was gefehlt hat, jetzt funktionierts!

ohne diese Zeile gäbe es eigentlich nicht die genannte Fehlermeldung ;)

----

eher Grund des Postings:
> Ich lasse das mal kurz noch als "unerledigt" weil ich schnell einkaufen gehen muss..
damit nicht andere unnötig reingeschauen habe ich auf 'erledigt' gesetzt,
sobald du eine neue Frage hier stellen willst, kann man das ja wieder aufheben
 

pg1337

Bekanntes Mitglied
Sers,

nochmals eine Frage:

Wie mach ich das, das diese Definition hier:

Java:
public class SchnelleLieferung implements Lieferung {
	
	   private Einkaufswagen einkaufswagen;
	    
	    public SchnelleLieferung(Einkaufswagen einkaufswagen) {
	        super();
	        this.einkaufswagen = einkaufswagen;
	}
}

nicht in jeder Klasse (StandardLieferung, SchnelleLieferung, OvernightLieferung) einzeln steht????:L


Gruß
 

faetzminator

Gesperrter Benutzer
Geht nicht. Du kannst zwar eine abstrakte Klasse machen, welche den Konstruktor mit Parameter verwendet und das Feld setzt (und einen Getter zur Verfügung stellt), aber du musst dann trotzdem Konstruktoren erstellen, welche [c]super(einkaufswagen);[/c] aufrufen.
 
S

SlaterB

Gast
du kannst auch eine allgemeine Oberklasse einführen, dann ist das Interface vielleicht obsolet,
und dort den Code in etwa einfügen, allerdings nicht per Konstruktor, weil Konstruktoren in Subklassen zu wiederholen sind,
sondern per init-Methode

eher unnötiger Aufwand, lasse es lieber so,



übrigens fast derselbe Beitrag von mir wie in
http://www.java-forum.org/java-basi...griff-klasse-interface-objekt.html#post850753
;)
aber dort bisschen komplizierter, wäre unfair nur dorthin zu verweisen,
dennoch nicht komplett falsch das Thema mal zu lesen
 

pg1337

Bekanntes Mitglied
Ok dann lasse ich das mal so :)

Bevor ich die Methoden ausgelagert habe in 3 Klassen habe ich diese Ja über ein If Statement aufgerufen (Einen String ausgelesen und überprüft ob er übereinstimmt, mit schnell o.ä.).

Nun habe ich das soweit in der Klasse test, also in der main-methode:

Java:
SchnelleLieferung sl = new SchnelleLieferung (einkaufswagen);
		StandardLieferung st= new StandardLieferung(einkaufswagen);
		OvernightLieferung ol= new OvernightLieferung(einkaufswagen);
		
		
		Bestellung bestellung= new Bestellung(einkaufswagen, "Schnelle Lieferung");
		
		
		System.out.println("Gesamtpreis der Artikel im Warenkorb:  " + Math.round(einkaufswagen.gesamtPreis()) + " €");
		System.out.println("Gesamtpreis der Artikel bei Lieferung: " + Math.round(sl.endPreis()) + " €");


Allerdings hat der Parameter bei bestellung "Schnelle Lieferung" nun keinen Einfluss mehr sondern ich muss das am Ende festlegen, was genommen wird, wobei ich das schon noch nach dem String haben wollte. Den Teil meine ich:
Java:
sl.endPreis()

Wie kann ich das wieder nach dem String automatisch machen lassen?
Zuvor stand da:

Java:
bestellung.getPreis()
.

Geht das wieder über das bestellung-Objekt?

Gruß
 
G

Gast2

Gast
Übergib doch statt dem String direkt das Lieferungsobjekt. Dann kann die Bestellung darauf zugreifen.
 

faetzminator

Gesperrter Benutzer
Wieso übergibt man dem Konstruktor von einer [c]Bestellung[/c] nicht auch gleich die [c]Lieferung[/c] :) ? Dann kannst du so was machen:
Java:
Bestellung bestellung = new Bestellung(einkaufswagen, new SchnelleLieferung());
 

pg1337

Bekanntes Mitglied
Wieso übergibt man dem Konstruktor von einer [c]Bestellung[/c] nicht auch gleich die [c]Lieferung[/c] :) ? Dann kannst du so was machen:
Java:
Bestellung bestellung = new Bestellung(einkaufswagen, new SchnelleLieferung());

In der Klasse Lieferung steht aber nur die Methode endPreis() drin.

Verstehe ich nicht ganz, mit Übergeben hab ich mir das auch schon gedacht aber weiß nicht genau wie das funkt.

Wie meinste das?
 
G

Gast2

Gast
So wie faetzminator schon geschrieben hat.
Du musst dann natürlich den Konstruktor anpassen. Auch das Interface würde ich dann anpassen in irgendwie sowas:
Java:
interface Lieferung {
    public double berechneVersandkosten(Einkaufswagen e);
}
berechneVersandkosten() kannst du dann in der Bestellung bei endPreis() aufrufen.
 

faetzminator

Gesperrter Benutzer
@EikeB: ich hab eher daran gedacht, den [c]Einkaufswagen[/c] und die [c]Lieferung[/c] an die [c]Bestellung[/c] zu übergeben, also so:
Java:
public Bestellung {
    private final Einkaufswagen einkaufswagen;
    private final Lieferung lieferung;

    public Bestellung(Einkaufswagen einkaufswagen, Lieferung lieferung) {
        this.einkaufswagen = einkaufswagen;
        this.lieferung = lieferung;
    }

    public double endPreis() {
        return einkaufswagen.gesamtPreis() * lieferung.faktor(); // irgendwie macht Faktor mehr Sinn als Endpreis für die Lieferung
    }
}
 

pg1337

Bekanntes Mitglied
Hab das jetzt mal so geändert:

Java:
		Bestellung bestellung= new Bestellung(einkaufswagen, new SchnelleLieferung(einkaufswagen));

So sieht das Objekt jetzt aus.

Klasse Bestellung sieht der Konstruktor jetzt so aus:

Java:
	private Lieferung lieferung;
	
	public Bestellung(Einkaufswagen einkaufswagen, Lieferung lieferung) {
		
		super();
		this.einkaufswagen = einkaufswagen;
		this.lieferung = lieferung;
}

Hier wird ja dann lieferung übergeben.

Interface sieht so aus:

Java:
public interface Lieferung {
	
	double result= 0.0;
	

	    public double endPreis(Einkaufswagen e);
	}

Sowie die 3 LieferKlassen ungefähr so:

Java:
public class SchnelleLieferung implements Lieferung {
	   private Einkaufswagen einkaufswagen;
	    
	   
	    public SchnelleLieferung(Einkaufswagen einkaufswagen) {
	        super();
	        this.einkaufswagen = einkaufswagen;
	}
	    
		 
		public double endPreis(Einkaufswagen e) {
			return einkaufswagen.gesamtPreis()*1.03;
		}
}


Stimmt das so?
Wenn ja wie rufe ich das dann im System.out.println("...") auf?

bestellung. ?

Gruß
 
G

Gast2

Gast
@EikeB: ich hab eher daran gedacht, den Einkaufswagen und die Lieferung an die Bestellung zu übergeben, also so:
Jep ich auch.

// irgendwie macht Faktor mehr Sinn als Endpreis für die Lieferung
Die Lieferart muss mindestens noch irgendwo den Gesamtwert der Bestellung herbekommen. Daher habe ich noch den Einkaufswagen übergeben. Oft findet man ja sowas wie:
Bestellwert < 100€ -> 4,90€ Lieferkosten
Bestellwert >= 100€ -> 0€ Lieferkosten
 

faetzminator

Gesperrter Benutzer
In der Lieferung wird aber der Endpreis schon berechnet.
Nicht nur der Faktor festgelegt.

Das sollte aber eben nicht so sein :) Oder aber wenn du es doch so willst, dann benötigst du gar keine Klasse [c]Bestellung[/c] mehr, da eine [c]Lieferung[/c] dein Preis selbst anhand eigener Daten und derer des [c]Einkaufswagen[/c] berechnet.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Frage zu Interface und List Allgemeine Java-Themen 4
T Frage zu interface und "guter Programmierstil" Allgemeine Java-Themen 4
S Frage zu Interface Allgemeine Java-Themen 7
L Interface Frage! Allgemeine Java-Themen 25
S Simple User Interface Frage Allgemeine Java-Themen 13
G Interface Frage Allgemeine Java-Themen 4
B Leere vererbte Interface-Methoden Allgemeine Java-Themen 8
OnDemand Interface imlementieren Allgemeine Java-Themen 4
Buroto Interface Allgemeine Java-Themen 2
T Komische Zeichen im Zusammenhang mit Serializable interface Allgemeine Java-Themen 13
M Kann man Annotationen auf Klassen einschränken die ein Interface implementieren? Allgemeine Java-Themen 1
H Kombination Interface und Abstrakte Klasse bei Generics Allgemeine Java-Themen 3
B JaxB und @XmlIDREF mit Interface Allgemeine Java-Themen 1
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
P Abstrakte Klassen vs. Interface Allgemeine Java-Themen 4
Kirby.exe Autocloseable Interface Allgemeine Java-Themen 2
T Abgeleitetes Interface public ohne Schlüsselwort "interface"? Allgemeine Java-Themen 3
S static in Interface und Klasse Allgemeine Java-Themen 2
S static methode im Interface Allgemeine Java-Themen 1
S Interface, generischer Datentyp, Exception? Allgemeine Java-Themen 3
B Vererbung Interface und implementierende Klassen Allgemeine Java-Themen 8
A Anonyme Klassen - Interface Allgemeine Java-Themen 5
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
J Generische Interface - Problem Allgemeine Java-Themen 3
mrBrown Namensfindung Fluent-Interface Allgemeine Java-Themen 0
J Logik in Interface Allgemeine Java-Themen 2
N Best Practice Allgemeines Verhalten für ein Interface implementieren? Allgemeine Java-Themen 7
B eigenes Consumer Interface Allgemeine Java-Themen 0
S 2 methoden mit gleichen namen und ein Interface Allgemeine Java-Themen 9
N GUI Interface, swing Allgemeine Java-Themen 7
Thallius Konzeptproblem User-Interface Allgemeine Java-Themen 5
T Interface vs abstract Allgemeine Java-Themen 2
S Klassen Abstract, Interface und ein Chat Tool Allgemeine Java-Themen 1
I Interface Interface / Klasse - wieso Abstract? Allgemeine Java-Themen 13
D generische Interface und konkrete Methode Allgemeine Java-Themen 3
C Klassen Problem mit Funktion einer Generischen Klasse die ein Interface implementiert Allgemeine Java-Themen 0
N Problem mit Generics und Interface Allgemeine Java-Themen 4
D Methode mit optionalen Parametern in Interface Allgemeine Java-Themen 3
T Interface mit generische Typen Allgemeine Java-Themen 5
M Interface einer Library implementieren Allgemeine Java-Themen 3
A Klassen ein Interface aufzwingen Allgemeine Java-Themen 4
Bananabert Interface Custom 'Event' mit Interface Allgemeine Java-Themen 10
J Interface Serializable Methodensignatur Allgemeine Java-Themen 2
J Interface Interface für Framework verwenden Allgemeine Java-Themen 4
F Interface IInterface oder Interface? Allgemeine Java-Themen 3
M Generics (bounded wildcards statt Interface Bezeichnern) -- Sinn oder Unsinn? Allgemeine Java-Themen 2
T Interface Probleme Allgemeine Java-Themen 8
M Queues und Queue Interface Allgemeine Java-Themen 3
I Mehrfaches Implementieren eines generischen Interface Allgemeine Java-Themen 9
W Java Native Interface und "mp3player" Allgemeine Java-Themen 3
M Über Liste verschiendene JComponents mit eigenem implementierten Interface ansprechen Allgemeine Java-Themen 7
P Eclipse Java Native Interface-Problem Allgemeine Java-Themen 8
Z Abstrakte Klassen /Interface Allgemeine Java-Themen 5
S Interface Welchen Interface Stil favorisiert ihr? (usability) Allgemeine Java-Themen 17
faetzminator statische Variablen in Interface - Vererbung? Allgemeine Java-Themen 9
R Implementierung eines Interface durch 2 verschiedene Klassen Allgemeine Java-Themen 6
T OpenOffice Interface Elemente Ein/Ausblenden Allgemeine Java-Themen 5
K Interface Interface comparable machen Allgemeine Java-Themen 9
T Interface > Abstract > Class Allgemeine Java-Themen 11
N Trick für Compilerfehler bei fehlendem Interface Allgemeine Java-Themen 12
X Interface - Klasse einladen Allgemeine Java-Themen 6
G Interface -> InterfaceImplementierung Allgemeine Java-Themen 3
Ark Array durch Interface ersetzen Allgemeine Java-Themen 7
R Interface instanzieren Allgemeine Java-Themen 8
KrokoDiehl JNI: native im Interface Allgemeine Java-Themen 4
S normale vererbung als interface Allgemeine Java-Themen 2
E Beispiel für ein möglichst einfaches Interface Allgemeine Java-Themen 22
N Unterschied abstract interface und interface Allgemeine Java-Themen 4
S interface verbung problem Allgemeine Java-Themen 9
S problem programm mit interface: Allgemeine Java-Themen 3
R Vererbung mit Interface und Abstract Allgemeine Java-Themen 3
B Interface und von Thread ableiten Allgemeine Java-Themen 6
R Interface Serializable technische Begrenzung Allgemeine Java-Themen 2
T Interface-Referenz Allgemeine Java-Themen 2
L interface abstrakte klasse Allgemeine Java-Themen 21
S Interface Geschäftslokik & GUI Allgemeine Java-Themen 6
G Interface zwischen 2 Programmierern Allgemeine Java-Themen 10
C Schnittstellen(interface) Allgemeine Java-Themen 9
N List<? implements "Interface"> geht nicht Allgemeine Java-Themen 13
D javadoc interface + implementation + @overrides Allgemeine Java-Themen 16
G Interface oder abstrakte Klasse Allgemeine Java-Themen 4
T Parameter einer Klasse auf Interface prüfen Allgemeine Java-Themen 6
A feststellen, welche Klassen ein Interface implementieren Allgemeine Java-Themen 3
G class, interface, or enum exp? Allgemeine Java-Themen 2
S Interface Klasse überladen. Allgemeine Java-Themen 2
K Inneres Interface äußere Klasse Allgemeine Java-Themen 7
T Interface "on-the-fly" implementieren? Allgemeine Java-Themen 3
J Objektorientiert - Interface & Klassen Allgemeine Java-Themen 3
G Interface - Klassen implementieren das - Reflection ok? Allgemeine Java-Themen 4
T "Programming against the interface" sinnvoll? Allgemeine Java-Themen 18
G Interface mehrfach implementieren Allgemeine Java-Themen 5
@ zur Laufzeit Interface aus jar implementieren? Allgemeine Java-Themen 5
A Was ist der genau Sinn eines Interface? Allgemeine Java-Themen 13
E Oberbergriff für class und interface Allgemeine Java-Themen 20
D QuickSort, Interface Allgemeine Java-Themen 2
R Interface für Arithmethik? Allgemeine Java-Themen 3
MQue Interface implementieren Allgemeine Java-Themen 7
P Liste von Klassen die ein Interface implementieren speichern Allgemeine Java-Themen 12
T Instanz einer Interface abgeleiteten Klasse erzeugen Allgemeine Java-Themen 3
F Ein interface und private Methoden? Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben