Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe ein kleines Problem. Ich soll ein Interface zu einer Klasse erzeugen. Ich bin mir jedoch nicht ganz sicher, ob ich es richtig/sinnvoll gemacht habe. Hier ist erstmal die Klasse:
Java:
public class BankAccount {
private List<BankTransaction> transactions =
new ArrayList<BankTransaction>();
public Money getBalance() {
Money ret = new Money();
for (BankTransaction transaction : this.transactions) {
ret = ret.add(transaction.getTransactionValue());
}
return ret;
}
public List<BankTransaction> getTransactions() {
return this.transactions;
}
public void addTransaction(BankTransaction transaction) {
if (transaction == null)
return;
this.transactions.add(transaction);
}
}
Und hier ist mein Interface:
Java:
public interface IBankAccount {
public Money getBalance();
public List<BankTransaction> getTransactions();
public void addTransaction(BankTransaction transaction);
}
Und hier nochmal die genaue Aufgabenstellung:
Code:
In Java lässt sich Information Hiding unter anderem mit Interfaces umsetzen. Geben Sie den
Code zu einem Interface an, das sich auf die unten angegebene Klasse BankAccount bezieht.
Ich bin mir jetzt leider absolut nicht sicher, ob mein Interface gut ist. Ich würde mich sehr Feedback freuen. Übrigens: Die Klasse wurde nicht von mir erstellt und daran soll auch nichts geändert werden.
Naja, wenn du die Methoden in einem Interface festlegst , musst du Sie in jeder Klasse oder Subklasse die dieses Interface implementiert , konkretisieren , da ja alle Methoden abstrakt sind.
Du müsstest also jedes mal festlegen wie z.B getBalance() in der jeweiligen klasse gehandhabt wird.
Okay, das ist mir ja klar, aber ich bin mir eben nicht ganz sicher, ob das bei diesem Beispiel sinnvoll umgesetzt wurde. Wir haben NUR diese Klasse und sollen dazu ein Interface erstellen, daher weiß ich ja gar nicht, was sich drumherum befindet. Findest du das Interface denn sinnvoll? angenommen, dass es wird von dieser Klasse implementiert (Details sind ja nicht bekannt)?
Nehmen wir an, da wir ja die anderen klassen nicht kennen
BankKonto.java - implementiert dein Interface um auf Methoden wie
Code:
getBalance();
zuzugreifen,
dann macht es dies vielleicht anders als z.B in der Klasse
Sparbuch.java
die ebenfalls eine Methode
Code:
getBallance();
bräuchte
somit kannst du über ein Interface, Methoden bereitstellen die ähnlich sind(von mehreren klassen genutzt werden sollen), aber von den Klassen selbst anders umgesetzt(implementiert) werden müssen.
somit macht das schon sinn.
Bei dir geht es ja um Information Hidding also, Das Minimieren des wechselseitigen Wissens von Klassen übereinander
Hallo,
Das sieht soweit ganz gut aus. In deinem Interface kannst du dir die Deklaration "public" sparen, da das Interface "public" und somit auch der Inhalt für alle aufrufenden Methoden sichtbar ist. Ebenso muss deine Klasse ihr Interface implementieren also:
Java:
public class BankAccount implements IBankAccount {
...
}
Das Interface wird in der Klasse in der die Methoden aufgerufen werden sollen Extended.
Java:
public class irgendeineKlasse extends IBankAccount {
private void myMethod(){
getBallance();
}
}
Alternativ zum "extenden" könntest du auch mit "dependencyInjections" arbeiten, je nach deinem Wissensstand ist das eher ungeeignet.
Hi,
entschuldige du hast natürlich Recht, Interfaces können von Klassen nur implementiert werden... :bloed:
Java:
public class irgendeineKlasse extends BankAccount implements IBankAccount{.....}
ergibt allerdings auch keinen Sinn, da "BankAccount" bereits "IBankAccount" implementiert und somit auch in "irgendeineKlasse" verfügbar ist. Was jedoch nichts daran ändert das meine Aussage das Interface zu "extenden" falsch war.
Gruß
wenn das die Ausgangssituation ist stimme ich dir zu, wenn BankAccount allerdings das Interface nicht implementieren würde, könnte er es so verfassen, das interface zu implementieren ist ja kein zwang ^^ , das gute daran ist allerdings, wenn
irgendeineKlasse BankAccount erweitert und BankAccount das Interface implementiert, ist z.B irgendeineKlasse nicht gezwungen die Methoden die in dem Interface festgelegt sind zu Implementieren, sondern er "Kann" anders als in BankAccount(also der Superklasse) die Methoden in den Subklassen implementieren und überschreiben.
Ob das Interface Sinn macht musst du dir überlegen...
Ein Interface soll die Klasse die es implementiert dazu zwingen die vorgegebenen Methoden zu implementieren. Wenn du also nur eine Klasse mit deinen Methoden hast mach ein Interface keinen Sinn. Hast du mehrere Klassen die auf jeden Fall alle definierten Methoden nutzen sollen ist ein Interface Sinnvoll.