明示的に宣言しない場合、メソッドまたはインスタンス変数のデフォルトのアクセス修飾子は何ですか?
例えば:
package flight.booking;
public class FlightLog
{
private SpecificFlight flight;
FlightLog(SpecificFlight flight)
{
this.flight = flight;
}
}
このコンストラクタのアクセス修飾子は保護されていますか、それともパッケージですか?同じパッケージ内の他のクラス(flight.booking
)がこのコンストラクタを呼び出すことはできますか?
Javaから ドキュメンテーション
クラスに修飾子がない場合(デフォルト、package-privateとも呼ばれます)、それはそれ自身のパッケージ内でのみ表示されます(パッケージは関連クラスのグループと命名されます - 後のレッスンでそれらについて学ぶでしょう)。
member level
では、トップレベルのクラスと同じ意味で、public修飾子またはno modifier
(package-private)を使用することもできます。
あなたがここで読むことができる全文最近書いたもの):
http://codeinventions.blogspot.com/2014/09/default-access-modifier-in-Java-or-no.html
ドキュメントから:
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
状況によって異なります。
それがクラスの中にあるとき:
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
}
デフォルトのアクセス修飾子はpackage-privateです - 同じパッケージからのみ見えます
これはほとんどあなたのためにこれを要約するはずであるコードサンプルです...以下に加えて、あなたが他のパッケージでデフォルトにアクセスすることができない方法を示すことがもう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
}
}
はい、同じパッケージに入っています。そのパッケージの外側にあるものは、それへのアクセスを許可されません。
デフォルトの修飾子はpackage
です。同じパッケージ内のコードだけがこのコンストラクタを呼び出すことができます。
あなたのコンストラクタのアクセス修飾子はpackage-private(default)です。あなたがクラスpublicを宣言したように、それはどこにでも見えるでしょうが、コンストラクタは見えないでしょう。あなたのコンストラクタはそのパッケージの中にだけ見えるでしょう。
package flight.booking;
public class FlightLog // Public access modifier
{
private SpecificFlight flight;
FlightLog(SpecificFlight flight) // Default access modifier
{
this.flight = flight;
}
}
クラスにコンストラクタを記述しない場合、コンパイラはそのクラスの同じアクセス修飾子を使用してデフォルトのコンストラクタを生成します。次の例では、コンパイラはpublicアクセス修飾子を使用してデフォルトのコンストラクタを生成します(classと同じ)。
package flight.booking;
public class FlightLog // Public access modifier
{
private SpecificFlight flight;
}
いいえ、他のパッケージへのデフォルトのアクセスレベルを呼び出すことはできません。しかし、あなたはパッケージ内でアクセスできます。詳しくは このリンク に従ってください。
デフォルトのアクセス修飾子はpackage-private(つまりDEFAULT)で、同じパッケージから見えるonlyです。
デフォルトのアクセス修飾子 - クラスに修飾子がない場合(デフォルト、パッケージプライベートとも呼ばれます)、それは自身のパッケージ内でのみ表示されます(パッケージは関連クラスの名前付きグループです)。
このコンストラクタのアクセス修飾子は保護されていますか、それともパッケージですか?
暗黙のうちにあなたのコンストラクタaccess modifierがあなたのクラスのaccess modifierになると思います。あなたのクラスはパブリックアクセスを持っているので、コンストラクタは暗黙のうちにパブリックアクセスを持つでしょう
OCA Java SE 7プログラマーIという本から:
明示的なアクセス修飾子を使用せずに定義されたクラスのメンバーは、パッケージのアクセシビリティ(デフォルトのアクセシビリティとも呼ばれる)で定義されます。パッケージアクセス権を持つメンバーは、同じパッケージ内で定義されたクラスとインタフェースにのみアクセス可能です。