2つのpublic classのプログラムを実行する場合の方法


以下のプログラムで質問があります。  
以下のプログラムをjavac Main1.javaでコンパイルすると、コンパイルエラーが出ます。  
エラー内容

[code]

    Main1.java:20: エラー: クラス Heroはpublicであり、ファイルHero.javaで宣言する必要があります
            public class Hero{
                   ^
    
[/code]

恐らく、Heroクラスをネストしていない（Main1クラスの中に組み込んでいない）ため、独立したクラス2つがあり、エラーが出ているのだとも思います。今回のように、クラスをネストしない場合は、どのように実行すればいいでしょうか？

[code]

    import java.util.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    
    
        public class Main1{
            public static void main(String[]args){
                Hero a= new Hero();
    
                a.name = "ピカチュウ";
                a.hp=100;
    
                System.out.println("勇者"+a.name+"を生み出した！");
    
                a.sit(5);
            }
          }
    
            public class Hero{
              String name;
              int hp;
              int level=10;
          
              public void sleep(){
                this.hp=100;
                System.out.println(this.name+"は眠って回復した！");
              }
          
              public void sit(int sec){
                this.hp+=sec;
                System.out.println(this.name+"は"+sec+"秒座った");
              }
          }
    
    
[/code]




Public classの宣言を含むJavaのソースファイルには、クラス名.java というファイルを付けてください。  
クラス名.javaをjavacでコンパイルすると、クラス名.classというクラスファイルが出来ます。

そして、"java クラス名" というコマンドで、クラス名のjavaプログラムが実行されます。

ファイル名に含まれているクラス名を頼りにして、どこを実行したら良いのかを決めるので、クラス名とファイル名に齟齬があるとエラーとなります。

これは、javaでのお約束なので、かならず守るようにしてください。

