Javaファイルに複数のクラスを含めることはできますか?


回答:


128

はい、できます。ただし、公開トップレベルクラスは1 つにつき1 つのみです。.javaファイルであり、パブリックトップレベルクラスはソースファイルと同じ名前でなければなりません。

1つのソースファイルに複数のクラスを含める目的は、関連するサポート機能(内部データ構造、サポートクラスなど)をメインのパブリッククラスと一緒にバンドルすることです。これを行わなくても常に問題はありません。唯一の影響は、コードの可読性(またはそうでないか)にあります。


1
余分なクラスを非公開にしたい場合は、そうすることをお勧めします。そうすれば、誤ってそれらのクラスを使用する外部を壊すことなく、後で完全に変更できます。
Erich Kitzmueller、2009年

3
1.0の互換性のためにあります(ネストされたクラスの前)。言語の大きな間違いです。これを使用する最大の利点は、IDEに絶望的なファイル処理があることです。
トム・ホーティン-09年

25
ファイルごとに1 つのパブリックトップレベルクラス。ファイルごとにいくつでもパブリック内部クラスを含めることができます。
エリクソン2009年

@Tom、ファイルごとに内部クラスまたは複数のトップレベルクラスのどちらが間違いだと思いますか?
finnw 2011年

@finnwファイルごとに複数の最上位クラス。それはとても間違っています。どこjava.awt.LightweightDispatcherですか
トム・ホーティン-タックライン

17

パブリッククラスを実装する場合は、そのクラスと同じ名前のファイルに実装する必要があります。1つのファイルには、1つのパブリッククラスと、必要に応じていくつかのプライベートクラスを含めることができます。これは、クラスがパブリッククラスによって内部的にのみ使用される場合に役立ちます。さらに、パブリッククラスには内部クラスを含めることもできます。

単一のソースファイルに1つ以上のプライベートクラスを含めることは問題ありませんが、内部クラスと匿名クラスを使用する方が読みやすくなります。たとえば、匿名クラスを使用して、パブリッククラス内にコンパレータクラスを定義できます。

  public static Comparator MyComparator = new Comparator() {
    public int compare(Object obj, Object anotherObj) {

    }
  };

Comparatorクラスは、通常、公開するために別のファイルを必要とします。これにより、それを使用するクラスにバンドルされます。


1
no-modifierを使用してファイル内にある場合、これは実際にはプライベートクラスではありません。プライベートクラスを内部クラスにしないと、プライベートクラスを作成できません。
ビョルン

10

はい、好きなだけ!

ただし、すべてのファイルで1つの「パブリック」クラスのみ。


6

.javaファイルはコンパイル単位と呼ばれます。各コンパイル単位には、任意の数のトップレベルのクラスとインターフェースを含めることができます。パブリックトップレベルタイプがない場合は、コンパイルユニットに任意の名前を付けることができます。

//Multiple.java
//preceding package and import statements

class MyClass{...}
interface Service{...}
...
//No public classes or interfaces
...

コンパイル単位には、パブリッククラス/インターフェースを1つだけ含めることができます。cuは、このパブリックトップレベルタイプとまったく同じ名前にする必要があります。

//Test.java
//named exactly as the public class Test
public class Test{...}
//!public class Operations{...}
interface Selector{...}
...
//Other non-public classes/interfaces

メインメソッドの重要なポイント-パート1

パート2

(第2部で取り上げたクラス数とそのアクセスレベルに関するポイント)


5

はい、複数のパブリッククラスを作成できますが、ネストされたクラスである必要があります。

public class first {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    }

    public class demo1
    {

        public class demo2
        {

        }
    }
}

4

匿名の内部クラスの他に、パブリックインターフェイスを実装するプライベート内部クラスもあります(この記事を参照))。外部クラスは、内部クラスのすべてのプライベートフィールドとメソッドにアクセスできます。

これにより、どちらの実装も公開せずに、モデルとそのビューなどの2つの密結合クラスを作成できます。別の例は、コレクションとその反復子です。


4

一般に、ファイルごとに1つのクラスが必要です。このように整理すると、クラスを検索するときに、その名前のファイルだけを検索すればよいことがわかります。

例外は、クラスが1つ以上の小さなヘルパークラスを使用して最適に実装されている場合です。通常、これらのクラスが同じファイルに存在する場合、コードを追跡するのが最も簡単です。たとえば、メソッド呼び出し間でデータを渡すには、小さな「タプル」ラッパークラスが必要になる場合があります。別の例は、RunnableまたはCallableを実装する「タスク」クラスです。それらは非常に小さいので、親クラスを作成して呼び出すのに最適です。


4

はい200%

例:

class A {
 void methodDeclaration() { System.out.println("!!!"); }
 }
 class B {
 public static void main(String[] args) {
new A().methodDeclaration();
    }
 }

2

はい、できますが、Javaコンパイラーが.Classファイルを作成するので、どのパッケージ内にもパブリッククラスは1つしか存在できません。パブリッククラス名と同じ名前の.Classファイルです。クラスファイルの名前をコンパイラに指定します。



1

「.javaファイルごとに非静的な最上位のパブリッククラスは1つしか存在できない」と思います。だよね?


ここで答えるのではなく、質問としてこれを尋ねるべきです。
Ashish Kumar 2017

1

シングルトンを実装する場合、それはアプリケーションの実行中にメモリ内にインスタンスが1つだけあるプログラムで実行されるクラスです。シングルトンを実装する方法の1つは、パブリッククラス内にプライベート静的クラスをネストすることです。 。次に、内部プライベートクラスは、プライベートインスタンスにアクセスするためのパブリックメソッドが呼び出されたときにのみインスタンス化します。

このウィキの記事をチェックしてください。

https://en.wikipedia.org/wiki/Singleton_pattern

コンセプトは噛むのに時間がかかります。


1

.javaファイルでは、ファイルと同じ名前のパブリックトップレベルクラスは1つしか存在できませんが、すべてのユーザーにエクスポートして外部クラスのフィールド/メソッドにアクセスできるパブリック内部クラスがいくつかある場合があります。次に例を示します。 :AlertDialog.Builder( 'public static' により変更)in AlertDialog( 'public'により変更)


1

はい。1つの.Javaファイルに複数のクラスを含めることができます。しかし、あなたはそれらの1つを公開しています。パブリッククラスの名前と同じ名前で.javaファイルを保存します。その.javaファイルをコンパイルすると、.javaファイルで定義されたクラスごとに個別の.classファイルが取得されます。

これとは別に、1つの.javaファイルで複数のクラスを定義する方法が多すぎます。

  1. 内部クラスの概念を使用します。
  2. 匿名クラスの概念を使用します。

1

はい !.javaファイルに含めることができるパブリッククラスは1つだけです。

これらの2つのクラスを公開する場合は、A.javaとB.javaの2つの.javaファイルに配置する必要があります。


2
私はあなたの応答の追加何より12の他人の答えからよりもわからないんだけど
後藤

1

はい、.javaファイル内に複数のクラスを含めることができます。最大で1つは公開できます。その他はパッケージプライベートです。それらをプライベートまたは保護することはできません。パブリックの場合、ファイルにはそのクラスの名前が必要です。それ以外の場合は、そのファイルに名前として何でも指定できます。

1つのファイル内に多くのクラスがあることは、それらのクラスが同じパッケージにあることを意味します。そのため、そのパッケージ内にあるがそのファイル内にない他のクラスも、それらのクラスを使用できます。さらに、そのパッケージがインポートされると、インポートするクラスもそれらを使用できます。

より詳しい調査については、こちらのブログ投稿をご覧ください


1
Stack Overflowへようこそ!ここではまだ取り上げられていない情報について説明していただきありがとうございます。また、所有権を宣言し、関連情報をここに含めながら、ブログ投稿をうまく引用しました。将来このサイトにもっと寄稿することを選択した場合は(そうすることを願っています)、この記事を検討して、ブログを引用した場合に投稿が引き続き好評であることを確認してください。
キャッスル

0

パブリッククラスのトップレベルは 1つだけですファイルには、クラスをます。そのパブリッククラスのクラス名は、ファイルの名前である必要があります。多くのパブリック内部クラスを持つことができます。

1つのファイルに多くのクラスを含めることができます。ファイル内のクラス可視性のさまざまなレベルの制限は次のとおりです。

トップレベルのクラス:
1つのパブリッククラス
0のプライベートクラス
任意の数のデフォルト/保護クラス

内部クラス:
任意の可視性を持つ任意の数の内部クラス(デフォルト、プライベート、保護、パブリック)

私が間違っていたら訂正してください。


0

はい、できます。ただし、パブリッククラスはソースファイルと同じ名前でなければならないため、.javaファイルごとに1つのパブリッククラスしか存在できません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.