Kann jemand bitte auf Fehler korrigieren?

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)

Anonymrosy 
Fragesteller
 19.01.2024, 14:13
abstract class Ticket {
    private String inhaber;


    public Ticket(String inhaber) {
        this.inhaber = inhaber;
    }


    protected String getInhaber() {
        return inhaber;
    }


    abstract double getPreis();


    public String toString() {
        return "Ticket von " + inhaber;
    }
}


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 + " Stationen";
    }


    public double getPreis() {
        return 2.5;
    }
}


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 werden die Befehle eingefügt
        System.out.println(et);
        System.out.println(at);
        System.out.println(et.getInhaber());
        System.out.println(et instanceof Ticket);
        System.out.println(tickets[0] instanceof Einzelticket);
        //tickets[0].maxStationen=2;
        System.out.println(tickets[0]);
        System.out.println(tickets[0].getPreis());
    }
}

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

0
daCypher  19.01.2024, 14:57
@Anonymrosy

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.

0
publuc Einzelticket(

sollte wohl eher public heissen.

Woher ich das weiß:Hobby – private Programmiererei
Anonymrosy 
Fragesteller
 18.01.2024, 13:14

Ja genau, habs gerade korrigiert, danke!

0