144

メソッドまたはインスタンス変数のデフォルトのアクセス修飾子を明示的に指定しない場合、何を指定しますか?

例えば:

package flight.booking;

public class FlightLog
{
    private SpecificFlight flight;

    FlightLog(SpecificFlight flight)
    {
        this.flight = flight;
    }
}

このコンストラクターのアクセス修飾子は保護されていますか、それともパッケージですか? である同じパッケージ内の他のクラスはflight.booking、このコンストラクターを呼び出すことができますか?

4

13 に答える 13

121

ドキュメントから:

Access Levels
Modifier        Class    Package    Subclass    World
-----------------------------------------------------
public           Y        Y          Y           Y
protected        Y        Y          Y           N
(Default)        Y        Y          N           N
private          Y        N          N           N
于 2015-07-14T17:18:27.053 に答える
40

それは文脈に依存します。

クラス内にある場合:

class example1 {

    int a = 10; // This is package-private (visible within package)

    void method1() // This is package-private as well.
    {
        -----
    }
}

インターフェイス内にある場合:

interface example2 {

    int b = 10; // This is public and static.
    void method2(); // This is public and abstract
}
于 2013-12-23T23:00:10.553 に答える
22

デフォルトのアクセス修飾子は package-private です - 同じパッケージからのみ表示されます

于 2013-04-23T08:50:55.513 に答える
15

以下は、これを要約したコードサンプルです...以下に加えて、別のパッケージのデフォルトにアクセスできないことを示す方法がもう1つあります。

デフォルトは、それをサブクラス化するクラスが別のパッケージにある場合、サブクラスでアクセスできませんが、サブクラスが同じパッケージにある場合はアクセスできます。

package main;

public class ClassA {
    private int privateVar;
    public int publicVar;
    int defaultVar;
}

package main;

public class ClassB {
    public static void main(String[] args) {
        ClassA a = new ClassA();
        int v1 = a.publicVar;   // Works
        int v2 = a.defaultVar;  // Works
        int v3 = a.privateVar;  // Doesn't work

    }
}

package other;

public class ClassC {
    public static void main(String[] args) {
        ClassA a = new ClassA();
        int v1 = a.publicVar;   // Works
        int v2 = a.defaultVar;  // Doesn't work
        int v3 = a.privateVar;  // Doesn't work
    }
}
于 2014-01-02T04:45:45.323 に答える
5

はい、同じパッケージに表示されます。そのパッケージの外にあるものは、それにアクセスすることはできません。

于 2015-10-21T11:13:02.143 に答える
3

Default アクセス修飾子はpackage-private (つまり DEFAULT) であり、同じパッケージからのみ表示されます。

于 2013-04-23T09:26:52.787 に答える
1

デフォルトのアクセス修飾子 - クラスに修飾子がない場合 (デフォルト、package-private とも呼ばれます)、そのクラスは独自のパッケージ内でのみ表示されます (パッケージは、関連するクラスの名前付きグループです)。

于 2014-04-21T05:38:06.680 に答える
1

いいえ、既定のアクセス レベルを他のパッケージに呼び出すことはできません。ただし、パッケージ内でアクセスできます。詳細については、このリンクをたどってください。

于 2014-04-21T04:59:48.860 に答える
0

このコンストラクターのアクセス修飾子は保護されていますか、それともパッケージですか?

コンストラクターのアクセス修飾子は、暗黙的にクラスのアクセス修飾子になると思います。あなたのクラスはパブリックアクセスを持っているので、コンストラクターは暗黙的にパブリックアクセスを持っています

于 2013-04-23T08:50:23.407 に答える
0

OCA Java SE 7 Programmer Iという本から:

明示的なアクセス修飾子を使用せずに定義されたクラスのメンバーは、パッケージ アクセシビリティ (既定のアクセシビリティとも呼ばれます) で定義されます。パッケージ アクセス権を持つメンバーは、同じパッケージで定義されたクラスとインターフェイスにのみアクセスできます。

于 2015-08-17T10:26:13.710 に答える