1

この質問は、クラス自体(メソッドやデータではない)をパブリックとして宣言する必要がある場所に関連しています。

現在、私はJavaの初心者で、非常に基本的なことだけを独学で学んでいます。私は他のいくつかの言語に精通していますが、Javaでは、1つのメインクラス(1つのファイル)のすべてのプログラムのように、非常に基本的なプログラムしか作成していません。

そこで今日、私は何か新しいことを試して、クラスを別々のファイルに入れることにしました。私が驚いたのは、クラスを別のファイルに配置したときに、「パブリック」とマークされていなくても、このクラスがメインプログラムにアクセスできることでした。

明確な例として、1つのフォルダーに2つのファイルしかない場合を考えてみましょう。以下を含むファイル「mainprog.java」:

class mainprog {
    public static void main(String[] args) {
        hello myHello = new hello();
        myHello.sayHello();
    }
}

そして、以下を含むファイル「hello.java」:

class hello {
    void sayHello() {
    System.out.println("Hello world");
    }
}

「hello」の何もpublicとして指定されていませんが、これはコンパイルされ、

javac mainprog.java
java mainprog

だから私は、クラス定義に「パブリック」が本当に必要なのはどこか疑問に思っていますか?

新しい情報を追加するための編集 以下の回答で示唆されているように、異なるパッケージからファイルを作成するために、各ファイルに「package」ステートメントを追加してみました。予想通り、クラス「hello」とメソッド「sayHello()public」の両方を作成しない限り、クラス「hello」へのアクセスは拒否されました。ありがとうございました。

4

3 に答える 3

1

どちらのクラスもパッケージプライベートです。それらは両方とも同じフォルダにあるため、両方のクラスがお互いを見ることができます。

あるクラスがパッケージの外部にある場合、または別のパッケージの別のクラスがそれらにアクセスする必要がある場合、そのクラスは利用できません。

これは、Oracleのメソッド/クラス/フィールドの可視性への参照です。

于 2013-03-24T15:57:40.913 に答える
1

パッケージ定義

Javaパッケージは、JavaクラスをModulaのモジュールと同様の名前空間に編成するためのメカニズムです。JavaパッケージはJARファイルと呼ばれる圧縮ファイルに保存できるため、クラスを一度に1つずつではなく、グループとしてより高速にダウンロードできます。プログラマーは通常、パッケージを使用して、同じカテゴリーに属するクラスまたは同様の機能を提供するクラスを編成します。

パッケージは、パッケージに含まれるタイプに固有の名前空間を提供します。同じパッケージ内のクラスは、互いのパッケージアクセスメンバーにアクセスできます。

パブリッククラスの使用。

オブジェクトを別のパッケージからこのクラスにしたい場合。

デモパッケージに1つのクラスがあるとします。

Demo package.
  Demo.java

両方のクラスは異なるパッケージに含まれています。

Demo1 package
   Demo1.java

次に、別のパッケージにあるDemo1.javaにDemo.javaクラスのオブジェクトを作成する必要があります。次に、Demoクラスをパブリックに定義する必要があります。

このドキュメントをお読みください。

于 2013-03-24T15:59:13.840 に答える
1

デフォルトでは、同じパッケージ[またはフォルダー]内のすべてのクラスにアクセス修飾子「保護」があります。そのため、問題なくクラスにアクセスできます。「継承」の概念を参照すると、アクセス修飾子についてよりよく理解できます。乾杯 !!

于 2013-03-24T16:20:15.350 に答える