*JAVA-パッケージ
アクセス制御プログラムによるカプセル化
public class Time{
public int hour;
public int minute;
public int second;
}
クラスのインスタンスを作成し、メンバー変数に直接アクセスして値を変更できます. Time t = new Time();
t.hour = 25;
メンバー変数の時間は0以上24未満でなければなりませんが、上記のコードのように誤った値を指定しても、これを阻止することはできません.この場合、privateまたはprotectedに制限し、メンバー変数の値を読み取りおよび変更する共通の方法を提供し、メンバー変数の値を間接的に処理することが望ましい.
public class Time{
private int hour; //접근제어자를 private 로 하여
private int minute; //외부에서 직접 접근하지 못하도록 한다.
private int second;
public int getHour(){ return hour; }
public void setHour(int hour)
{
if (hour < 0 \\ hour > 23) return;
this.hour = hour;
}
public int getMinute(){ return minute; }
public void setMinute(int minute)
{
if(minute < 0 \\ minute > 59) return;
this.minute = minute;
}
public int getSecond(){ return second; }
public void setSecond(int second)
{
if(second < 0 \\ second > 59) return;
this.second = second;
}
}
getメソッド:メンバー変数の値を返すsetメソッド:パラメータに格納されている値をチェックして初期化する
public class TimeTest{
public static void main(String args[])
{
Time t = new Time(12, 35, 30);
System.out.println(t);
t.hour = 13; //에러! 변수 hour의 접근제어자가 private임으로 접근 불가능
t.setHour(t.getHour()+1); //현재시간보다 1시간 이후로 변경
System.out.println(t); //System.out.println(t.toString());과 같음
}
}
class Time{
private int hour, minute, second;
Time(int hour, int minute, int second){
setHour(hour);
setMinute(minute);
setSecond(second);
}
public int getHour(){ return hour;}
public void setHour(int hour)
{
if (hour < 0 \\ hour > 23) return;
this.hour = hour;
}
public int getMinute(){ return minute; }
public void setMinute(int minute)
{
if(minute < 0 \\ minute > 59) return;
this.minute = minute;
}
public int getSecond(){ return second; }
public void setSecond(int second)
{
if(second < 0 \\ second > 59) return;
this.second = second;
}
public String toString()
{
return hour + ":" + minute + ":" + second;
}
}
실행결과
12:35:30
13:35:30
したがって、メンバー変数への直接アクセスは許可されません.メソッドによるアクセスのみが許可されます.作成者のアクセス制御者
作成者でアクセス制御者を使用することで、インスタンスの作成を制限できます.通常、作成者のアクセス制御者はクラスのアクセス制御者と同じですが、異なるアクセス制御者を指定することもできます.
作成者のアクセス制御者をprivateと指定した場合、外部から作成者にアクセスできないため、インスタンスは作成できません.それでもクラス内にインスタンスを作成できます.
class Singleton{
private Singleton(){
}
}
逆に、これらのクラスとインスタンスを外部で使用するために、インスタンスを作成することで、返す共通の方法を提供できます.この方法は共通であり,同時に静的であるべきである. class Singleton{
// getinstance()에서 사용될 수 있도록 인스턴스가
// 미리 생성되어야 하므로 static이어야 한다.
private static Singleton s = new Singleton();
private Singleton(){
{
//인스턴스를 생성하지 않고도 호출할 수 있어야 하므로 static이어야 한다.
public static Singleton()
{
return s;
}
}
Reference
この問題について(*JAVA-パッケージ), 我々は、より多くの情報をここで見つけました https://velog.io/@jo_dbsgh95/JAVA-접근제어자를-이용한-캡슐화テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol