Plusieurs classes dans un seul fichier

Je n’arrive pas à mettre plusieurs classes dans un seul fichier. Par exemple, quand mon fichier ressemble à:

public class FirstClass() {} public class SecondClass() {} public class ThirdClass() {} 

Je reçois une erreur lors de la compilation. Je ne suis pas tout à fait sûr de ce qui cause ceci. Des idées?

Un fichier Java peut être composé de plusieurs classes, avec la ressortingction que seul l’un d’entre eux peut être public. Dès que vous supprimez public mot clé public de vos classes, vous pouvez les combiner dans un seul fichier Java.

Au risque de manger à la cuillère

Veuillez lire http://docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html

 import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.DecimalFormat; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; public class TheaterWindow extends JFrame { private JPanel pnlAdultTicketPrice, pnlAdultTicketsSold, pnlChildTicketPrice, pnlChildTicketsSold, pnlCalculate, pnlMain; private JLabel lblAdultTicketPrice, lblAdultTicketsSold, lblChildTicketPrice, lblChildTicketsSold; private JTextField txtAdultTicketPrice, txtAdultTicketsSold, txtChildTicketPrice, txtChildTicketsSold; private JButton btnCalculate; public TheaterWindow() { // Sets window title setTitle("Theater"); // Sets layout to BorderLayout setLayout(new GridLayout(5,1)); // Specifies what happens when close button is clicked setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Builds the panels buildPanels(); // Add the panels to the frame's content pane add(pnlAdultTicketPrice); add(pnlChildTicketPrice); add(pnlAdultTicketsSold); add(pnlChildTicketsSold); add(pnlCalculate); // Size the frame to fit all of the panels pack(); // Display the window setVisible(true); } private void buildPanels() { // Creates labels to display instructions lblAdultTicketPrice = new JLabel("Adult ticket price"); lblChildTicketPrice = new JLabel("Child ticket price"); lblAdultTicketsSold = new JLabel("Adult tickets sold"); lblChildTicketsSold = new JLabel("Child tickets sold"); // Creates text fields that are 10 characters wide txtAdultTicketPrice = new JTextField(10); txtChildTicketPrice = new JTextField(10); txtAdultTicketsSold = new JTextField(10); txtChildTicketsSold = new JTextField(10); // Creates button with caption btnCalculate = new JButton("Calculate"); // Adds action listener to button btnCalculate.addActionListener(new CalcButtonListener()); // Creates panels pnlAdultTicketPrice = new JPanel(); pnlChildTicketPrice = new JPanel(); pnlAdultTicketsSold = new JPanel(); pnlChildTicketsSold = new JPanel(); pnlCalculate = new JPanel(); pnlMain = new JPanel(); // Adds elements to their proper panels pnlAdultTicketPrice.add(lblAdultTicketPrice); pnlAdultTicketPrice.add(txtAdultTicketPrice); pnlChildTicketPrice.add(lblChildTicketPrice); pnlChildTicketPrice.add(txtChildTicketPrice); pnlAdultTicketsSold.add(lblAdultTicketsSold); pnlAdultTicketsSold.add(txtAdultTicketsSold); pnlChildTicketsSold.add(lblChildTicketsSold); pnlChildTicketsSold.add(txtChildTicketsSold); pnlCalculate.add(btnCalculate); // Adds all of the above panels to a main panel pnlMain.add(pnlAdultTicketPrice); pnlMain.add(pnlChildTicketPrice); pnlMain.add(pnlAdultTicketsSold); pnlMain.add(pnlChildTicketsSold); pnlMain.add(pnlCalculate); } private class CalcButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) { // Creates object of Theater Theater theater = new Theater(); // Sets the member variables of Theater to the user's input theater.setAdultTicketPrice(Double.parseDouble(txtAdultTicketPrice.getText())); theater.setChildTicketPrice(Double.parseDouble(txtChildTicketPrice.getText())); theater.setAdultTicketsSold(Integer.parseInt(txtAdultTicketsSold.getText())); theater.setChildTicketsSold(Integer.parseInt(txtChildTicketsSold.getText())); // Creates DecimalFormat object for rounding DecimalFormat dollar = new DecimalFormat("#.##"); // Display the charges. JOptionPane.showMessageDialog(null, "Adult ticket gross: $" + Double.valueOf(dollar.format(theater.getAdultGross())) + "\n" + "Child ticket gross: $" + Double.valueOf(dollar.format(theater.getChildGross())) + "\n" + "Adult ticket net: $" + Double.valueOf(dollar.format(theater.getAdultNet())) + "\n" + "Child ticket net: $" + Double.valueOf(dollar.format(theater.getChildNet())) + "\n" + "Total gross: $" + Double.valueOf(dollar.format(theater.getChildGross())) + "\n" + "Total net: $" + Double.valueOf(dollar.format(theater.getTotalNet()))); } } public class Theater { private double PERCENTAGE_KEPT = 0.20; private double adultTicketPrice, childTicketPrice; private int adultTicketsSold, childTicketsSold; public double getAdultGross() { return getAdultTicketPrice() * getAdultTicketsSold(); } public double getAdultNet() { return PERCENTAGE_KEPT * getAdultGross(); } public double getAdultTicketPrice() { return adultTicketPrice; } public int getAdultTicketsSold() { return adultTicketsSold; } public double getChildGross() { return getChildTicketPrice() * getChildTicketsSold(); } public double getChildNet() { return PERCENTAGE_KEPT * getChildGross(); } public double getChildTicketPrice() { return childTicketPrice; } public int getChildTicketsSold() { return childTicketsSold; } public double getTotalGross() { return getChildGross() + getAdultGross(); } public double getTotalNet() { return getChildGross() + getChildNet(); } public void setAdultTicketPrice(double adultTicketPrice) { this.adultTicketPrice = adultTicketPrice; } public void setAdultTicketsSold(int adultTicketsSold) { this.adultTicketsSold = adultTicketsSold; } public void setChildTicketPrice(double childTicketPrice) { this.childTicketPrice = childTicketPrice; } public void setChildTicketsSold(int childTicketsSold) { this.childTicketsSold = childTicketsSold; } } } 

Oui Vous pouvez écrire toutes vos classes dans un seul fichier .java, mais vous ne devez avoir qu’une seule classe publique (si le nom de fichier et le nom de classe sont identiques)

Exemple:

Classe A { }

classe B {}

classe C {}

Je suppose que vous êtes très débutant! Il suffit de copier et coller tous ces contenus dans un seul fichier TheaterDemo.java . Et n’oubliez pas de supprimer tous les mots-clés public au début de la déclaration de classe.

Un fichier Java peut contenir au plus une classe publique de niveau supérieur. Cette classe publique de niveau supérieur peut contenir un nombre illimité de classes publiques nestedes.

Vous pouvez éliminer les erreurs de votre compilateur par l’une des approches suivantes:

  • Déplacer les autres classes dans leurs propres fichiers. Par exemple: FirstClass.java, SecondClass.java et ThirdClass.java .
  • Imbrication des classes dont le nom n’est pas le fichier nom de base. Par exemple:

     public class FirstClass() { public class SecondClass() {} public class ThirdClass() {} } 
  • Suppression du qualificatif public de toutes les classes sauf celle dont le nom est le nom de fichier du fichier. Cette approche est devenue moins courante après l’introduction de classes nestedes dans Java v1.1. Par exemple, dans le fichier FirstClass.java, vous pourriez avoir:

     public class FirstClass() {} class SecondClass() {} class ThirdClass() {} 

Dans la spécification du langage Java, section 7.6: Déclarations de type de niveau supérieur :

Si et seulement si les packages sont stockés dans un système de fichiers (§7.2), le système hôte peut choisir d’imposer la ressortingction selon laquelle il s’agit d’une erreur de compilation si un type n’est pas trouvé dans un fichier sous un nom composé du nom du type. plus une extension (telle que .java ou .jav) si l’un des cas suivants est vrai:

  • Le type est désigné par code dans les autres unités de compilation du package dans lequel le type est déclaré.

  • Le type est déclaré public (et donc potentiellement accessible à partir du code d’autres packages).

Supprimez simplement public de toutes les autres définitions de classe et collez le code dans le fichier TheaterDemo.java .

 public class TheaterDemo { public static void main(Ssortingng[] args) { TheaterWindow theaterWindow = new TheaterWindow(); } } //Here class code after removing public // Here another class code 

Je vois que vous avez déjà effectué ce type de mise en oeuvre. Se il vous plaît se référer

  private class CalcButtonListener implements ActionListener 

dans votre classe TheaterWindow .

En faisant cela, vous créez des classes internes, c’est-à-dire que CalcButtonListener est une classe interne de la classe TheaterWindow . Certains concept, vous pouvez étendre à d’autres classes.