Kann jemand bitte auf Fehler korrigieren?
Hallo, ich habe folgende Aufgabe, bei der ich mir nicht so sicher bin, ob meine Antworten richtig sind. Falls einer drüber schauen kann, wäre ich sehr dankbar.
Das was ich Fett makiert habe sind meine Antworten.
Ich bedanke mich im Voraus!
Folgende Klassen sind gegeben:
public absract class Ticket{
private String inhaber;
public Tickets(String inhaber){
this.inhaber=inhaber;
}
protected String getInhaber[]{
return inhaber;
}
abstract double getPreis();
public String toString(){
return "Ticket von "+inhaber;
}
}
public final class Einzelticket extends Ticket{
public int maxStationen = 3;
public Einzelticket(String inhaber, int maxStationen]{
super(inhaber);
this.maxStationen=maxStationen;
}
public String toString(){
return "Einzelticket von " + super.getInhaber() + " für " + maxStationen + }
public double getPreis(){
}
}
public class Aboticket extends Ticket{
private int gueltigkeitsTage;
public Aboticket(String inhaber, int gueltigkeitsTage){
super(inhaber);
this.gueltigkeitsTage=gueltigkeitsTage;
}
public double getPreis(){
return gueltigkeitsTage *1.2;
}
}
public class Test{
public static void main(String args[]{
Einzelticket et = new Einzelticket("Alice",3);
Aboticket at = new Aboticket("Bob",4);
Ticket[] tickets = {et};
//Hier wurden die Befehle eingefügt
}}
Die folgenden Befehle werden am Ende der Main-Methode eingefügt.
Wählen Sie so aus, dass wahre Aussagen entstehen.
a.)System.out.println(et); ____________
Zur Auswahl:
- gibt "Einzelticket von Alice für 3 Stationen" aus
- gibt "Ticket von Alice" aus
- gibt kryptische String aus
- schmeißt einen Compilerfehler
b.)System.out.println(at); __________
Zur Auswahl
- gibt "Einzelticket von Bob für 3 Stationen" aus
- gibt "Ticket von Bob" aus
- gibt kryptische String aus
- schmeißt einen Compiler
c.)System.out.println(et.getInhaber()); ___________
Zur Auswahl
- gibt "Alice" aus
- gibt "Ticket von Alice" aus
- gibt "true" aus
- schmeißt einen Compilerfehler
d.)System.out.println(et instanceof Ticket); ___________
Zur Auswahl
- gibt "true" aus
- gibt "false" aus
- gibt "Einzelticket" aus
- gibt "Ticket" aus
- schmeißt einen Compilerfehler
e.)System.out.println(tickets[0] instanceof Einzelticket); __________
Zur Auswahl
- gibt "true" aus
- gibt "false" aus
- gibt "Einzelticket" aus
- gibt "Ticket" aus
- schmeißt einen Compilerfehler
f.) tickets[0].maxStationen=2; ____________
Zur Auswahl
- setzt das Attribut maxStationen auf 2
- passiert nichts
- schmeißt einen Compilerfehler
g.)System.out.println(tickets[0]); ___________
Zur Auswahl
- gibt "Einzelticket von Alice für 3 Stationen" aus
- gibt "Ticket von Alice" aus
- gibt kryptische String aus
- schmeißt einen Compilerfehler
h.)System.out.println(tickets[0].getPreis()); _________
Zur Auswahl
- gibt "2.5" aus
- gibt "Ticket von Alice" aus
- gibt kryptischen String aus
- schmeißt einen Compilerfeher
2 Antworten
Ich gehe mal davon aus, dass die Schreibfehler ("absract", Unterschied im Klassennamen und Konstruktor (Ticket/Tickets), eckige statt runde Klammern bei getInhaber und Einzelticket, fehlendes " Stationen"; bei Einzelticket.toString, fehlende Klammer bei main) so nicht im vorgegebenen Code sind, oder?
Was mir auffällt, ist dass bei Einzelticket.getPreis() kein Wert zurückgegeben wird. Dadurch würde sich die Klasse Einzelticket gar nicht kompilieren lassen und dadurch lassen sich auch alle Klassen, die Einzelticket verwenden, nicht kompilieren. Dadurch, dass die Klasse Test versucht, ein Einzelticket zu erstellen, würde also bei allen Tests ein Compilerfehler erscheinen. Wenn du in der Methode z.B. return 2.5; reinschreibst, passt alles außer f). Dadurch, dass die Variable tickets als Ticket[] deklariert wird, hat das Programm auch nur Zugriff auf die Member, die es in der Klasse Ticket gibt. Die Variable maxStationen gibt es aber nur in der Klasse Einzelticket. Deshalb würde das auch einen Compilerfehler werfen.
(PS: Wenn du eh den ganzen Code abschreibst, kannst du ihn auch gleich in eine IDE schreiben und selbst schauen, was rauskommt)
Genau. Der Fehler müsste angezeigt werden, wenn du dieses "tickets[0].maxStationen=2;" auch laufen lässt.
So, wie ich die Aufgabe verstanden habe, steht aber in dem vorgegebenen Code bei Einzelticket.getPreis() nichts drin, dann würde eben jeder Test einen Compilerfehler werfen.
publuc Einzelticket(
sollte wohl eher public heissen.
Also so bekomme ich das da heraus, allerdings heißt es dann, dass bei f.) ein Compilferfehler rauskommt, ja oder?
Weil das ja nicht funktionieren würde
Einzelticket von Alice für 3 Stationen
Ticket von Bob
Alice
true
true
Einzelticket von Alice für 3 Stationen
2.5