アクセス修飾子:アクセスされるクラス、属性、およびメソッドを変更するために使用されます
アクセス修飾子 | 範囲 | 変更可能 |
---|---|---|
公衆 | 任意の位置 | クラス、属性、メソッド |
保護 | 継承された関係にアクセスできます | プロパティとメソッド |
デフォルト(変更なし) | 同じパッケージで | クラス、属性、メソッド |
民間 | クラス | プロパティとメソッド |
bean.Userクラス:
package com.cao.test.word1.bean;
public class User {
public String name = "cao";
public void show() {
System.out.println("show()...");
}
}
テストクラス:
package com.cao.test.word1;
import com.cao.test.word1.bean.User;
public class Test {
public static void main(String[] args) {
User user = new User();
System.out.println(user.name);
user.show();
}
}
通常の実行
cao
show()...
bean.Userクラスのパブリックが削除された場合、つまり:
class User {
public String name = "cao";
public void show() {
System.out.println("show()...");
}
}
現時点では、デフォルトの変更と異なるパッケージのため、テストはエラーを報告します
同様に、メンバー変数とメンバーメソッドのパブリックを削除します。
public class User {
String name = "cao";
void show() {
System.out.println("show()...");
}
}
デフォルトの変更+異なるパッケージのため、テストでもエラーが報告されます
新しいプロジェクトを作成する場合、構造は次のとおりです。
親クラス:メンバー変数は保護された状態で変更されます
public class Father {
protected String name="cao";
}
SonクラスはFatherクラスを継承します。
public class Son extends Father {
public void show(){
System.out.println(name);
}
}
テスト:
public class Test {
public static void main(String[] args) {
Son son = new Son();
son.show();
}
}
実施した:
cao
メンバー変数は保護された+ Sonクラスで変更されるため、Fatherクラスを継承します
Beanパッケージの下に新しいテストクラスを作成します:
bean.Testクラス:
public class Test {
public static void main(String[] args) {
Father father=new Father();
System.out.println(father.name);
}
}
ファーザークラスの保護されたメンバー変数を削除します。
public class Father {
String name="cao";
}
現時点でのデフォルトへの変更Sonカテゴリエラーですが、bean.Testが父と同じパッケージであるため、bean.Testが指定されていません。
ファーザークラスのメンバー変数の保護をプライベートに変更します。つまり、次のようになります。
public class Father {
private String name="cao";
}
このとき、Sonクラスはエラーを報告しますが、bean.Testもエラーを報告します。これは、プライベートな変更により、メンバー変数はクラス内でのみアクセスできるようになるためです。
ファーザークラスのメンバー変数の保護をパブリックに変更します。つまり、次のようになります。
public class Father {
public String name="cao";
}
この時点で、SonがFatherのサブクラスでなくても、通常どおりアクセスできます
。Sonクラス:
public class Son {
public void show() {
Father father = new Father();
System.out.println(father.name);
}
}
Testクラスのmain関数を介して実行します。
cao
メソッドでアクセス修飾子がオーバーライドされると、親クラスのアクセススコープは子クラスの
父クラスのアクセススコープ以下になります。
public abstract class Father {
abstract void show();
}
Son类:
public class Son extends Father{
@Override
void show() {
System.out.println("show()...");
}
}
テストクラス:
public class Test {
public static void main(String[] args) {
Son son=new Son();
son.show();
}
}
show()...
Sonクラスのshow()メソッドがパブリックモディフィケーションに変更された場合:
public class Son extends Father{
@Override
public void show() {
System.out.println("show()...");
}
}
操作は正常で、
保護に変更されています。
public class Son extends Father{
@Override
protected void show() {
System.out.println("show()...");
}
}
プライベートに変更した場合の動作は正常
です。
public class Son extends Father{
@Override
private void show() {
System.out.println("show()...");
}
}
エラー