[Java]オブジェクト向けプログラミング-コントローラ


コントロール(modifier)とは?


制御者Modifierは、クラス、変数、またはメソッドの宣言子とともに使用して、追加の意味を与えることができる.制御者の種類は,アクセス制御者と他の制御者に大別できる.
コントローラタイプ
アクセス制御者:public、protected、default、private
その他:静的、抽象的、ネイティブ、インスタント、同期、volatile、strictfp
主にクラス、メンバー変数、メソッドで使用され、複数のコントローラを1つのターゲットに組み合わせることができます.
ただし、アクセス制御者については、一度に4つのオプションのうちの1つしか使用できない(publicprivateを同時に適用できないことを意味する).

静的-クラスの共通

static制御者は、「クラス」、「汎用」の意味を有する.たとえば、クラスにはstaticと宣言されたクラス変数があります.インスタンスを単独で作成する必要はなく、値も共有します.同様に、staticを有する方法は、インスタンスを作成せずに使用することもできる.
class A {
	static int a = 100;
    static void aFunc() {}
}

public static void main(String[] args){
	A.a = 200;	// 이렇게 인스턴스 없이도 사용할 수 있어요
    A.aFunc();
}

final-最後の、変更不可


変数に適用されると、constのように定数化されます.つまり、変えられない.メソッドに適用すると、過度に使用することはできません.クラスに適用すると、継承できません.
final class A {				// 더 이상 상속 불가
	final int a = 100; 		// 상수화, 이제 값 못 바꿈
    final void method(){} 	// 더 이상 오버라이딩 불가
}
class B extends A {			// Error! - 상속 못해요
	@Override
    void method() {}		// Error! - 오버라이딩 못해요
}
finalメンバー変数を初期化する方法があります.생성자초기화 블록です定数として定義できない初期化ロジックを実行できます.
class A {
    final static List<Integer> list; // 이렇게 =이 아닌 초기화 작업도 가능해요
    static{
        list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
    }

    final static List<Integer> list2 = new ArrayList<>();;
    static{
        //list2 = new ArrayList<>();	// 다시 초기화는 못해요
        list2.add(1);
        list2.add(2);
        list2.add(3);
        list2.add(4);
    }
    
    final int a;
    A(){
        a = 10;							// 생성자에서도 가능해요
        //a = 30;						// 마찬가지로 재초기환 안되요
    }

void method() { /*a = 20;*/ }			// 여기선 초기화 못해요
}

抽象的


メソッドの宣言のみを書き、実際に実行されていない추상 메서드を宣言します.
クラスでのみ使用されます.これにより、クラスに抽象的なメソッドがあることがわかりやすくなります.そのため、ClassとMethodでのみabstractを発表することができます.
abstract class:クラスに抽象メソッドが宣言されていることを通知します.抽象クラスはnewで直接生成できません.
abstract{type}関数名({パラメータ}):宣言子のみを作成し、インプリメンテーション子が作成されていない抽象メソッドであることを通知します.
abstract class App{			// 추상 클래스
	abstract void run();	// 추상 메서드, 구현부가 없어요
}
完了したクラスもabstract宣言でクラスを抽象化する場合があります.
この場合、抽象クラスは直接生成できない、すなわちnewである.これを使用して、直接的なインスタンスの生成を阻止します.
public abstract class WindowAdapter{
	public void open(){}
	public void listen(){}
	public void run(){}
	public void close(){}
}
上を見ると何の意味もないコードですしたがって,直接生成することは意味がない.abstractによって阻止されます逆に、クラスを継承する利点は、親に必要な部分のみを上書きすることです.

アクセス制御者


アクセス制御者は、メンバーまたはクラスが外部からアクセスできないことを制限する役割を果たすメンバーまたはクラスに使用します.
private:同じクラスでのみアクセスできます
default:同じパッケージ内でのみアクセス可能
protected:同じパッケージ内および他のパッケージのサブクラスからアクセス可能
public:アクセス制限なし
ここで、defaultは、あるキーワードではない制御者が示されていないことを意味する.
以下に示すように、アクセス範囲の大きい順にリストされます.
public →\to→ protected →\to→ (default) →\to→ private

パッヶージ


クラスまたはメンバーは、主にアクセス制御者を使用してクラスの内部データを保護します.
クラスを介して機能を作成し、他の開発者に提供したとします.このクラスのいくつかの変数またはメソッドは、予期せぬ結果をもたらす可能性があります.したがって、制御者によって外部で利用可能なものとできないものを区別することができる.
たとえば、人間というクラスを作成しました.しかし、ここには最近献血店に行くといつも血が足りないという開発者がいます.だから血より水が多くて、輸血すればたくさんの場所で供給されるので、いいのではないでしょうか.こんな思いで人というレベルの血を水に変えた人はもちろん死ぬでしょう?人類レベルを創造した開発者は血を流して川になるだろう.だからこのように隠す必要があるものは隠す必要があり、使えるものはアクセスを制限する必要があります.
このように外部からのアクセスを制限する方法を「データ非表示」または「カプセル化」と呼ぶ.コードの複雑さを最小限に抑えるために必要です.

コントロールユニット


制御者は以下のように組み合わせて使用することができる.
1.方法staticとabstractを同時に使用できない
類の方法は体幹のある方法にしか使えないからだ.
// 사용 X
abstract static void method();
2.クラスはabstractとfinalを同時に使用できません
クラスで使用されるfinalはクラスが拡張できないことを示し、abstractは継承によって完成しなければならない.これは矛盾している.
// 사용 X
abstract final void method();
抽象メソッドのアクセス制御者はプライベートではありません
abstractメソッドはサブクラスで実装されなければならないため、privateはサブクラスにアクセスできないため、矛盾が発生します.
// 사용 X
private abstract void method();
4.メソッドにprivateとfinalを一緒に使用する「必要」はありません.
privateメソッドは上書きできないからです.二つのうち一つを使うのも意味がある
// 쓸데 없는 TMI, 둘 중 하나만 써도 되요
private final void method();