2017-04-26 32 views
0

Ich hatte eine ausgezeichnete Antwort auf eine frühere Frage, also werde ich mein Glück hier schieben. Während es schon einen ausgezeichneten Beitrag darüber gibt; What does a "Cannot find symbol" compilation error mean? Ich stougle, um herauszufinden, welcher Grund zutrifft und warum.Kann nicht vererbte Klasse finden

Der Fehler tritt auf, wenn das Objekt FirstClassTicket erstellt wird, sowohl vor als auch nach dem Gleichheitszeichen, an dem FirstClass aufgerufen wird. Ich nehme an, dass ich einen Fehler gemacht habe, als ich FirstClass von Ticket geerbt habe, da dies ursprünglich gut funktionierte, indem ich Ticket anrief, bevor ich anfing, in verschiedene Ticket-Typen aufzunehmen.

class Booking{ 
    public static class Ticket{ 
     int Price; 
     int Amount=1; 
     int Discount=0; 
     public int WhatCost(){ 
      int Cost =Amount*(Price-Discount); 
      return Cost; 
     } 
     //Inheriting Ticket classes. 
    class FirstClass extends Ticket{ //Defines standard class tickets. 
     int Price =10; 
    } 

    } 
    public static void main(String args[]) { 
     FirstClass FirstClassTicket=new FirstClass(); 
     Scanner scanner = new Scanner(System.in); 
     System.out.println("Welcome to the advance booking service.");//Introduce program. 
     System.out.println("A first class ticket costs:"); 
     System.out.println(FirstClassTicket.WhatCost()); 
    } 
} 
+2

Sie haben FirstClass als eine innere Klasse von Booking definiert. Tun Sie sich selbst einen Gefallen und definieren Sie jede Klasse in einer eigenen Datei nach Java-Standard. Es sei denn, du willst eigentlich eine innere Klasse haben (was ich sehr bezweifle). Weiterführendes Lesematerial: [Java Tutorial: Verschachtelte Klassen] (https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html) –

+2

... oder einfach 'FirstClass'' static' machen. –

+0

Okay, ich schaue mir das an. Auch der Versuch, in 'statische Klasse FirstClass zu konvertieren, erweitert Ticket {// Definiert Standardklassentickets. 'Hat die Fehler nicht geändert. –

Antwort

0

Sie haben FirstClass als innere Ticketklasse definiert. Machen Sie die FirstClass als statisch und greifen Sie darauf zu, wie unten gezeigt.

Booking.Ticket.FirstClass FirstClassTicket=new Booking.Ticket.FirstClass(); 
Verwandte Themen