2

In.java という名前のファイルを作成し、次のコードを入力しました

class In {
   int a;

   public static void main(
      String args[] ) {
      Inheritance h = new Inheritance();
      h.set( 6 );
      System.out.println( h.get() );
   }

   void set(
      int a ) {
      this.a = a;
   }

   int get() {
      System.out.println( a );
      return a;
   }
}

コンパイルすると、継承に関するエラーが表示されました。次に、In を I Inheritance として名前を変更しました。

class Inheritance {
   int a;

   public static void main(
      String args[] ) {
      Inheritance h = new Inheritance();
      h.set( 6 );
      System.out.println( h.get() );
   }

   void set(
      int a ) {
      this.a = a;
   }

   int get() {
      System.out.println( a );
      return a;
   }
}

コンパイルして Inheritance.class を作成しましたが、ファイル名はまだ In.javapublic class Inheritanceで、クラスを Inheritance.java として変更する必要があることを警告するため、コンパイルします。実行するjava Inとエラーが表示されるようError: Could not find or load main class Inになりました 今、クラスの名前を In as In as

class In {
   int a;

   public static void main(
      String args[] ) {
      Inheritance h = new Inheritance();
      h.set( 6 );
      System.out.println( h.get() );
   }

   void set(
      int a ) {
      this.a = a;
   }

   int get() {
      System.out.println( a );
      return a;
   }
}

コンパイルすると、In.classとしてコンパイルされ、出力を実行すると、次のようなプログラムが実行されました

6 6

In.java でプログラムを作成し、 Class Inheritance という名前のクラスを実行すると、コンパイルされて Inheritance.class が与えられました。1. クラス名とファイル名が異なる場合、コンパイラはエラーを表示しませんか? 2. を実行するjava Inと、In.class ファイルが生成されると表示Error: Could not find or load main class Inされます。クラス名を Inheritance として In.java をコンパイルしているときに検出されないのはなぜですか? 1つのクラスファイルが同じディレクトリ内の他のクラスファイルを使用できますか?

4

1 に答える 1

5

宣言されたすべてのクラスpublicは、同じ名前のファイルに保持する必要があります。public クラスとそれを含むファイルの名前が異なる場合、コンパイル エラーになります。宣言されていないクラスpublicは、別の名前のファイルに保持できます。

生成されたクラス ファイルは、ファイル名ではなく、Java クラスに基づいて命名されることに注意してください。以下の例を見てください。

以下の図Xでは、任意の有効な名前です (Fooとを除くBar)。

例 1:

// filename X.java (doesn't compile)
public class Foo {

}
public class Bar {

}

コンパイラは、パブリック クラスについて不平を言い、独自のファイルに存在Fooしません。Bar.java

例 2:

// filename Foo.java (doesn't compile)
public class Foo {

}
public class Bar {

}

Barエラーは上記と同じですが、今回のみ適用されます。

例 3:

// filename Foo.java (compiles)
public class Foo {

}
class Bar {

}

生成されたファイルはFoo.classBar.classです。

例 4:

// filename X.java (compiles)
class Foo {

}
class Bar {

}

生成されたファイルはFoo.classBar.classです。

于 2013-11-01T17:22:44.353 に答える