Salve,
osservate questo codice
codice:
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
 
public class Graf_01{  
    public static void main(String[] args) {
       SwingUtilities.invokeLater(new Runnable() {
           public void run() {
             JFrame f = new JFrame("Disegno un ellisse");
                f.setBounds(800, 500, 300, 245);
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                 
                f.add(new MyComp());
                f.setVisible(true);          
            }            
       });
    }
}
class MyComp extends JComponent{    
    final BasicStroke spessore = new BasicStroke(5.0f);
    public void paintComponent(Graphics g) { 
       super.paintComponent(g);
       Graphics2D g2d =(Graphics2D)g;
       g2d.setStroke(spessore);
       Ellipse2D.Double fc = new Ellipse2D.Double(95,30,100,150);
       g2d.draw(fc);
    }
}

Sullo stesso file Graf_01.java abbiamo due classi la seconda MyComp non è una classe interna a Graf_01 è una classe esterna ma nello stesso file. Come si vede non ha nessun specificatore di accesso (o descrittore di visibilità) e così funziona. La cosa che chiedo è: omettendo lo specificatore per default quale specificatore le viene attribuito!?

Ho privato a metterglieli tutti con i seguenti risultati:

  • private Error: identifier not allowed here
  • public Error: Class MyComp is public, should be declared in a file named MyComp.java
  • protected Error: modifier protected not allowed here
  • package Error: Class, interface or enum expected

A questo punto ammetto di essere molto confuso.
Grazie per l'eventuale chiarimento.