AI作成・独立検証済(有資格者監修なし)1Z0-815 対応
クラス構造(1ファイルに置ける public トップレベル型は1つ)難易度 標準無料

ファイル Q3.java に次のコードが書かれている。コンパイル結果として正しいものを選べ。

1  public class Q3 {
2      public static void main(String[] args) {
3          System.out.println("hi");
4      }
5  }
6  public class Helper {
7      int value;
8  }
  1. Aコンパイルエラー(public なトップレベル型は1ファイルに1つまで)
  2. Bコンパイル成功・実行して hi と出力される
  3. Cコンパイルエラー(1ファイルに2つ以上のクラスを書くこと自体が禁止されている)
  4. Dコンパイル成功。ただし Helper クラスは別ファイルとして自動生成される
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

1つの .java ファイル(コンパイル単位)に複数のトップレベル型(class/interface/enum等)を書くこと自体は可能だが、 public なトップレベル型は1ファイルにつき最大1つという制約がある。さらに、その唯一の public 型はファイル名と同名でなければならない。

本コードには Q3(ファイル名と一致・public)に加え、Helperpublic で宣言されている。 public なトップレベル型が2つ存在するためコンパイルエラーになる。

解決するには Helper から public を外す(パッケージプライベートにする)か、Helper を別ファイル Helper.java に分ける。

各誤答が違う理由
  • BHelperpublic で宣言されており、ファイル名 Q3.java と一致する public 型は1つまでという制約に反するため、コンパイル自体が失敗する。
  • C1ファイルに複数のトップレベルクラスを書くこと自体は合法。禁止されているのは public 型を複数書くことであり、Helperpublic を外せば共存できる。
  • Djavac にそのような自動分割の機能はない。public 型の重複はコンパイルエラーとして検出されるだけで、自動的にファイルが分割されることはない。
ひっかけ: 「1ファイルに複数クラスを書くこと自体が禁止」だと誤解しやすいが、複数クラスを書くこと自体は合法。禁止されているのはpublic なトップレベル型を2つ以上書くことであり、2つ目以降は public を外せば同じファイルに共存できる。
コマンド例と想定される挙動(未実行)
javac でコンパイル:
Q3.java:6: error: class Helper is public, should be declared in a file named Helper.java
public class Helper {
       ^
→ コンパイル不成立(実行に至らない)。
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
この分野をもっと解いて、得点源に
Java基礎 を含む問題を分野別に演習できます。
演習する →