Compilerfehler

Lion.King

Aktives Mitglied
Hallo,

ich soll in diesem Code

Java:
public class Computer {
    public 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;
        }
    }
    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 + " Stationen";
        }
        public double getPreis(){
            return 2.5;
        }
    }
    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 werden die Befehle eingefügt
        }
    }
}

diese Befehle

Code:
            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);
            System.out.println(tickets[0]);
            System.out.println(tickets[0].getPreis());

in der Zeile mit dem Kommentar "//Hier werden die Befehle eingefügt" testen und schauen, ob dann Compilerfehler oder etwas anderes ausgegeben wird. Nachdem es es für alle Befehle gemacht hatte, musste ich aber feststellen, dass alle Befehle Compilerfehler aufweisen. Stimmt das oder kommt bei einem Befehl etwas anderes raus und wenn ja, was?
 
Ist das so die Aufgabe gewesen? Waren die Klassen alle so innere Klassen der Klasse Computer?

Oder waren die Klassen einzeln gegeben und Du hast die einfach nur in die Klasse Computer rein gepackt?

Und was genau ist die Aufgabenstellung? Das ergibt so gerade keinen Sinn, weil da so schlicht Fehler im Code sind.
 
So sieht die Aufgabe aus:

Folgende Klassen sind gegeben:

Java:
public class Computer {
    public 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;
        }
    }

    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 + " Stationen";
        }
        public double getPreis(){
            return 2.5;
        }
    }
    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 werden die Befehle eingefügt
        }
    }

Die folgenden Befehle werden am Ende der Main-Methode eingefügt.
Wählen Sie so aus, dass wahre Aussagen entstehen.

Code:
            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);
            System.out.println(tickets[0]);
            System.out.println(tickets[0].getPreis());
 
Zuletzt bearbeitet:
Also du hast innere Klassen. Diese haben, so sie nicht static sind, eine Referenz auf eine Instanz der übergeordneten Klasse.

Das führt hier dazu, dass es nicht möglich ist ohne eine Instanz von Computer irgend eine Instanz der inneren Klassen zu erstellen.
Einzelticket et = new Einzelticket("Alice",3);
kann somit nicht funktionieren, da es in einem statischen Context steht und es eben somit keine Instanz von Computer gibt.

Mögliche Lösungen, damit es lauffähig wird:
Option 1: Jeder der inneren Klassen in eine eigene Datei kopieren.
Option 2: Alle inneren Klassen noch den Modifier static geben.

Dann kannst Du auch die angegebenen Zeilen ausführen und schauen, was da ausgegeben wird.
 
Welche der Klassen in dem Programm sind innere Klassen? Und wie soll ich ihnen den Modifier geben? Einfach nach public dann static schreiben?
 
Warum probierst Du es nicht aus? Dann hast Du sehr schnell die Antwort auf die Frage.

Die Reihenfolge ist nicht festgelegt und kann prinzipiell beliebig gewählt werden.
 

Neue Themen


Zurück
Oben