ich hab hier ein Programm vor mir, dass aus einem Interface einer Klasse und einer Testklasse besteht. Soweit hab ich alles verstanden, denke ich nur diese drei Zeilen versteh ich nicht wirklich.
Bonus b = new Konto (1234, a000.);
b.addBonus(5.);
System.out.println(((Konto)b).getSaldo());
Ist b jetzt ein Objekt von Konto oder von bonus? Ist es überhaupt ein Objekt? und was macht des "(Konto)b" da in der Ausgabe??
Wäre echt nett wenn mir jemand helfen könnte.
Code:
public class InterfaceTest {
public static void main(String [] args){
Konto k = new Konto(4711, 2000.);
k.addBonus(20.);
System.out.println("Saldo von k: "+k.getSaldo());
Bonus b = new Konto(1234, 1000.);
b.addBonus(500.);
System.out.println(((Konto)b).getSaldo());
Konto k2 = new Konto(6543, 1000.);
k2.addBonus(30);
System.out.println("Saldo von k2: "+k2.getSaldo());
}
}
Code:
public interface Bonus{
double MIN_FUER_BONUS = 1000.; //Konstante
void addBonus(double betrag); //Abstrakte Methode die spaeter ueberschrieben wird
}
Code:
public class Konto implements Bonus {
private int kontonummer;
private double saldo;
public Konto(int kontonummer, double saldo){
this.kontonummer = kontonummer;
this.saldo = saldo;
}
public int getKontonummer(){
return kontonummer;
}
public void setKontonummer(int nr){
kontonummer = nr;
}
public double getSaldo(){
return saldo;
}
public void setSaldo(double betrag){
saldo = betrag;
}
public void zahleEin(double betrag){
saldo += betrag;
}
public void zahleAus(double betrag){
saldo -= betrag;
}
public void addBonus(double betrag){
if(saldo >= MIN_FUER_BONUS){
saldo += betrag;
}
}
}
Es ist ein Objekt das sowohl vom Typ Konto als auch Bonus ist.
Das (Konto)b ist ein cast. Dabei wird angenommen das b vom Typ Konto ist und deshalb auch so behandelt werden kann.
Währe b nicht vom Typ Konto würde eine ClassCastException geworfen werden.
Naja ungefähr. Es ist natürlich nur Objekt einer Klasse, kann aber,
da es das Interface Bonus implementiert, jederzeit als Bonus
angesehen werden. Es antwortet ja auf jeden Methodenaufruf
den Bonus anbietet.
x3n4 hat gesagt.:
Wusste gar nicht, dass man Objekte auf Klassen casten kann.
Nur die Syntax suggeriert das das Objekt auf eine Klasse gecastet wird.
In Wirklichkeit wird nur der Compiler zufriedengestellt und ihm versprochen
von der gecastete Instanz auf Methoden, die die Klasse in die gecastet wird, anbietet
aufgerufen kann.
(Mann! Ist deutsch verwirbelt...
Ich überlasse es den Grammatik-Profis mit Neigung zu
Orthographiebedingten Bauchschmerzen, meinen vorherigen Satz
zu entwirbeln. )