[Ava]OOP制御者(Modifier)[static,final,abstract]、アクセス制御者(access modifier)


せいぎょ者


クラスとクラスのメンバー(メンバー変数、メソッド)に付加的な意味を付与します。(英語:形容詞に似ている) アクセス制御者と他の制御者に大別される。

コントローラ外部コントローラへのアクセス


1つのターゲットは複数のコントローラを使用できますが、アクセスコントローラは1回しか使用できません。
public class Modifier {
	public static final int WIDTH = 200;
    //public : 접근제어자 - 제일 앞에 붙임
    //static, final : 제어자들
    
    public static void main(String[] args) {
    	System.out.println("WIDTH = "+WIDTH);
    }
}

static

  • メンバー変数およびメソッドは、ブロック
  • を初期化するために使用することができる.
    1)静的-ターゲット:メンバー変数
    すべてのインスタンスの共通クラス変数になります.
    クラス変数は使用可能で、インスタンスは作成されません.
    クラスはメモリにロードされたときに生成されます.
    2)静的目標:方法
    インスタンスを作成せずに呼び出す静的メソッドです.
    静的メソッドでは、インスタンスメンバーを直接使用することはできません.
    class StaticTest {
    	staic int width = 200; //클래스 변수(static 변수)
        static int height = 120; //클래스 변수(static 변수)
        
        static { //클래스 초기화 블럭
        	//static변수의 복잡한 초기화 수행
        }
        
        static int max(int a, int b) { //클래스 메소드(static 메소드) - iv 사용불가
        	return a>b ? a:b;
        }
    }

    final

  • クラスメソッド、メンバー変数、および地域変数は、
  • で使用できます.
    1)final-ターゲット:クラス
    変更できないクラス、拡張できないクラス.
    最終的に指定されたクラスは、他のクラスの祖先ではありません.
    //典型的なString、Math
    2)final-ターゲット:メソッド
    変更できない方法.
    最終的に指定したメソッドは、上書きによって再定義できません.
    3)final-ターゲット:メンバー変数/地域変数
    変数の前にfinalを付けると、この値は変更できない定数になります.
    final class FinalTest { // 조상이 될 수 없는 클래스
    	final int MAX_SIZE = 10; // 값을 변경할 수 없는 멤버변수(상수)
        
        final void getMaxSize() { // 오버라이딩 할 수 없는 메소드(변경불가)
        	final int LV = MAX_SIZE; //값을 변경할 수 없는 지역변수(상수)
            return MAX_SIZE;
        }    
    }
    
    class Child extends FinalTest {
    	void getMaxSize() {} // 에러 : 오버라이딩 불가 
    }
  • ジェネレータを使用してfinalメンバー変数を初期化
    :finalに付属する変数は定数で、通常は宣言と初期化を同時に行います.
    ただし、各インスタンスに固定値を持つインスタンス変数は、コンストラクション関数で初期化されます.
  • abstract

  • 抽象部分でさらに
  • を学ぶ.
  • クラスとメソッドが使用可能
    1)abstract-ターゲット:クラス
    クラス内の抽象メソッドが宣言されていることを示します.
  • 2)抽象-目標:方法
    宣言だけ書いて、実施は書かない.(実施部=本体={})
    abstract class AbstractTest { // 추상클래스 - 추상 메소드를 포함한 클래스 
    	abstract void move(); // 추상메소드 - 구현부가 없는 메소드
    }
    AbstractTest a = new AbstractTest(); //에러 : 추상 클래스의 인스턴스 생성 불가 (추상클래스=미완성설계도, 인스턴스=제품, 미완성 설계도로는 제품을 못 만든다!)

    アクセス制御者


    メンバーまたはクラスに使用し、外部からアクセスを制限します。 メンバー変数とクラス、メソッド、作成者に使用できます。 (default)-何も貼らないことを表す

    プログラム全体(制御プログラムなど)のpublicoooprotectedoodefultooprivateo
    public-アクセス制限は全くありません.
    protected-同じパッケージ内および他のパッケージのサブクラスからアクセスできます.
    (default)-同じパッケージにのみアクセスできます.
    private-同じクラスでのみアクセスできます.
    アクセス可能範囲:public>protected>(default)>private
    public class AcessModifier { // public이나 (default) 둘 중 하나 붙일 수 있음
    	int iv; // 멤버변수(인스턴스 변수)
        static int iv; // 멤버변수(클래스 변수)
        
        void method() {}
        //위 3 멤버들에는 4가지를 붙일 수 있음 public, (default), protected, private 
    }

    アクセス制御プログラムによるカプセル化


    アクセス制御プログラムを使用する理由 : 1. 外部からデータを保護 2.不要な内部使用を隠すための部分

    作成者のアクセス制御者

  • 通常、作成者のアクセス制御者はクラスのアクセス制御者と一致する.
  • 作成者の場合、アクセス制御者を使用してインスタンスの作成を制限できます.
  • コントロールユニット


    ターゲット使用可能な制御者クラスpublic(default)、final、abstractメソッドすべてのアクセス制御者、final、abstract、staticメンバー変数すべてのアクセス制御者、final、static領域変数final
    1)方法はstaticとabstractを同時に使用できない.
    ->静的方法は、実装部品を有する方法にのみ適用される.
    2)クラスはabstractとfinalを同時に使用できません.
    ->finalで使用されるクラスはクラスを拡張できませんが、abstractは継承によって完了する必要があります.これは矛盾しています.
    3)抽象メソッドのアクセス制御者はプライベートであってはならない.
    ->抽象メソッドはサブクラスで実装する必要がありますが、アクセス制御者がプライベートである場合は、サブクラスからアクセスできません.
    4)メソッドはprivateとfinalを同時に使用する必要はありません.
    ->アクセス制御者プライベートメソッドは上書きできません.どちらかを使うだけで十分です