Java-アクセス修飾子

アクセス修飾子:アクセスされるクラス、属性、およびメソッドを変更するために使用されます

アクセス修飾子 範囲 変更可能
公衆 任意の位置 クラス、属性、メソッド
保護 継承された関係にアクセスできます プロパティとメソッド
デフォルト(変更なし) 同じパッケージで クラス、属性、メソッド
民間 クラス プロパティとメソッド

ここに画像の説明を挿入
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()...");
    }
}

エラー

おすすめ

転載: blog.csdn.net/qq_44371305/article/details/113340223