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?
 

KonradN

Super-Moderator
Mitarbeiter
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.
 

Lion.King

Aktives Mitglied
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:

KonradN

Super-Moderator
Mitarbeiter
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.
 

Lion.King

Aktives Mitglied
Welche der Klassen in dem Programm sind innere Klassen? Und wie soll ich ihnen den Modifier geben? Einfach nach public dann static schreiben?
 

KonradN

Super-Moderator
Mitarbeiter
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.
 

Ähnliche Java Themen

Neue Themen


Oben