TIL|[Java]アクセス制御プログラム


Javaのアクセス制御者


Javaのアクセス制御者(Access Modifier)は、変数やメソッドを宣言するときにアクセスを制御する権限を設定し、アクセス制御者によってオブジェクト言語向けの重要な特性「カプセル化」を実現することができる.
<カプセル化>
オブジェクトへの直接アクセスをブロックして内部情報を非表示にし、オブジェクトが提供するフィールドとメソッドからアクセスを提供します.
Javaのアクセス制御者は4種類あります.
  • private-非公開
  • public-完全公開
  • default-公開パッケージ
  • protected-公開継承
  • アクセスはpublic-protected default-privateの順に徐々に制限されます.

    private


    アクセス制御者の中で最も制限の強い制御者privateである場合は、クラス内でのみアクセスできます.
    public class Sample {
        private String secret;
        private String getSecret() {
            return this.secret;
        }
    }
    上記の例のsecret変数およびgetSecret()メソッドは、Sample CLIESからのみアクセスできます.

    public

    publicと宣言されたクラスメンバーは公開され、オブジェクトを使用するプログラムの任意の場所からアクセスできます.

    default


    アクセス制御者を別途設定しない場合は、defaultアクセス制御者defaultアクセス制御者は、同じパッケージ内でのみアクセスできます.
    house/House_yu.java
    package house;
    
    public class House_yu {
    	String lastName = "Yu";
    }
    house/House_kim.java
    package house;
    
    public class House_kim {
    	String lastName = "Kim";
        
        public static void main(String[] a rgs) {
        	House_yu yu = new House_yu();
            System.out.println(yu.lastName);
            // Houst_yu 클래스의 변수 lastName에 접근 가능
            // Yu
        }
    }
    上記の例では、2つのクラス(House yu、House kim)のパッケージはhouseと同じであるため、House yuクラス変数lastNameにアクセスできます.

    protected

    protectedアクセス制御者は、次の領域にアクセスできます.
  • protected
  • protectedクラスが属するパッケージ
  • protected他のパケットを継承するサブクラス
  • house/House_yu.java
    package house;
    
    public class House_yu {
        protected String lastname = "Yu";
    }
    house/person/Hyemco.java
    package house.person;
    
    import house.House_yu;
    
    public class Hyemco extends House_yu {  // House_yu 상속
        public static void main(String[] args) {
            Hyemco name = new Hyemco();
            System.out.println(name.lastname);  
            // Yu
        }
    }
    House_yuクラスは、そのクラスを継承するHyemcoクラスパケットとは異なるが、House_yuの変数lastnameは保護されたアクセス制御者を有するため、他のパケットから継承されたサブクラスHyemcoアクセスname.lastnameにアクセスすることができる.
    defaultアクセス制御プログラムの場合、name.lastnameでコンパイルエラーが発生します.