アクセス制御者


自由と制限


プログラミングツールの基本的な目標は、あなたの考えを自由に表現できるようにすることです.しかし、自由だけでは足りない.プログラミングは小さいから大きいまで、簡単から複雑まで、単独のタスクから協力までです.このような変化に適応するためには、様々な制限が必要である.私たちのカリキュラムを通じて、これまで経験した最も代表的な制限の一つはデータ型です.変数が存在する場合、変数に含まれるデータ型と、どのメソッドがどのデータ型のデータを返すかを示すことで、ユーザーは変数とメソッドを安心して使用することができます.もちろん,これらの制限はツール設計者の好みやツールの目的に応じて取り入れられ,排除される.
これから学ぶ抽象クラス、final、アクセス制御者、インタフェースなどがこれらの制限です.熟考された制限なら、その目的は明確であるべきだ.自由秩序を与えることで自由を促進する.この授業では、制限の1つであるアクセス制御者について説明します.

アクセス制御者


アクセス制御者指定クラスメンバー(変数とメソッド)へのアクセス権
package com.yuri.javatutorials.accessmodifier;

class A {
	public String y() {
		return "public void y()";
	}

	private String z() {
		return "public void z()";
	}

	public String x() {
		return z();
	}
}

public class AccessDemo1 {
	public static void main(String[] args) {
		A a = new A();
		System.out.println(a.y());
		// 아래 코드는 오류가 발생한다.
		 System.out.println(a.z());
		System.out.println(a.x());
	}
}
Exception in thread "main"java.lang.Error: Unresolved compilation problem:
The method z() from the type A is not visible
at com.yuri.javatutorials.accessmodifier.AccessDemo1.main(AccessDemo1.java:22)
メソッドはキーワードprivateで開始します.privateは、クラス(A)以外にアクセスできないことを意味します.これらのプライベートな場所こそアクセス制御者(access modifier)と呼ばれている.

アクセス制御プログラムを使用する理由

package com.yuri.javatutorials.accessmodifier;

class Calculator {
	private int left, right;

	public void setOprands(int left, int right) {
		this.left = left;
		this.right = right;
	}

	private int _sum() {
		return this.left + this.right;
	}

	public void sumDecoPlus() {
		System.out.println("++++" + _sum() + "++++");
	}

	public void sumDecoMinus() {
		System.out.println("----" + _sum() + "----");
	}
}

public class CalculatorDemo {
	public static void main(String[] args) {
		Calculator c1 = new Calculator();
		c1.setOprands(10, 20);
		c1.sumDecoPlus();
		c1.sumDecoMinus();
	}
}

/*
++++30++++
----30----
*/
この2つの変数は、オブジェクトの外部から呼び出す必要はありません.したがって、この変数を外部から隠すためにprivateをアクセス制御者として指定します.
また,メソッドsumが追加され,実際の計算はこのメソッドの内部処理,計算結果を外部に出力するメソッドはsumDecoPlus,sumDecoMinusで処理される.
これにより、ユーザーがアクセス不可またはアクセス不要のメンバーにアクセスすることを制限できます.メンバーに近づくことを許可するかどうかは、スタッフの判断にかかっています.

ファインコントロール


アクセス制御者はpublicとprivateのほかに2種類あります.protectedとdefaultです.継承関係にある場合、protectedはまた、異なるパッケージ内のクラスにアクセスできます.defaultは、アクセス制御インジケータがなく、アクセス制御者がいないメソッドは、同じパッケージ内のメソッドと継承関係のメソッドのみにアクセスできることを示します.次の図は、各アクセス制御者がアクセスできる範囲を示しています.中にあればあるほど、厳格な接近制御が行われ、外にあればあるほど接近が許される.(



クラスのアクセス制御者


これまで、クラスメンバーのアクセス制御者を確認してきました.今回見たいのはクラスのアクセス制御者です.クラスにはアクセス制御者もいます.クラスのアクセス制御者は2つあり、publicとdefaultです.アクセス制御者が追加されていない場合、defaultはdefaultになります.クラスのアクセス制御者は、パッケージに関連する概念です.すなわち、アクセス制御者は共通のクラスであり、他のパッケージのクラスにも使用できますが、defaultは同じパッケージでのみ使用できます.

2つのクラスを作成
package com.yuri.javatutorials.accessmodifier.inner;

public class PublicClass {

}
package com.yuri.javatutorials.accessmodifier.inner;

class DefaultClass {

}
上記のクラスと同じパッケージでこれらのクラスを使用してもエラーは発生しません.
package com.yuri.javatutorials.accessmodifier.inner;

public class ClassAccessModifierInnerPackage {
    PublicClass publicClass = new PublicClass();
    DefaultClass defaultClass = new DefaultClass();
}
今回は他のパッケージのクラスで使用してみましょう.
package com.yuri.javatutorials.accessmodifier.outter;
import com.yuri.javatutorials.accessmodifier.inner.*;

public class ClassAccessModifierOuterPackage {
	PublicClass publicClass = new PublicClass();
	//	 DefaultClass defaultClass = new DefaultClass();
	// 오류 발생!  DefaultClass의 접근 제어자가 default이기 때문이다.
}
コメントセクションでエラーが発生しました.DefaultClassのアクセス制御者はdefault😐
package com.yuri.javatutorials.accessmodifier.inner;

// public class PublicName {}
// public 클래스가 포함된 소소코드는 public 클래스의 클래스 명과 소스코드의 파일명이 같아야 한다
public class PublicNameDemo {}
重要な制約要因がある.publicクラスを含む小さなコードは、publicクラスのクラス名とソースコードのファイル名と同じである必要があります.上記のコードの名前はPublicNameDemoです.Javaです.コメントセクションでエラーが発生しました.共通クラスの名前がソースコードの名前と一致しないためです.これは、ソースコードに共通クラスが存在することを意味します.

授業が終わる


アクセス制御者は、まず、それが何なのか、どのアクセス制御者なのかを知る必要があります.また、短期的には、パブリックとプライベートを区別するだけで、より安全で信頼性の高いアプリケーションを作成できます.😀
この文章は生活コードに基づくjavaチュートリアルのまとめです.