Java学習ノート(一)オブジェクト向け---パッケージ

2099 ワード

オブジェクト向け---カプセル化
パッケージは対象思想に向かう三大特徴の一つである.
理解:オブジェクトのプロパティと実装の詳細を非表示にし、公開アクセスのみを提供します.
メリット:
  • 変化を隔離する
  • 使いやすい
  • コード多重性向上
  • セキュリティ向上
  • パッケージの原則:
  • は、外部に提供する必要のないコンテンツをすべて非表示にする(修飾子privateによって非表示にする)
  • .
  • は属性をすべて非表示にし、
  • に共通の方法でアクセスすることを提供する.
    アクセス権修飾子:
  • の意味:Javaでは、クラス、変数、メソッド、および構築メソッドへのアクセスを保護するためにアクセス制御子を使用できます.
  • アクセス権限は、次の表で説明できます:
  • 修飾子
    現在のクラス
    同じパッケージ内
    子孫(同じパッケージ)
    子孫クラス(異なるパッケージ)
    その他のパッケージ
    public
    Y
    Y
    Y
    Y
    Y
    protected
    Y
    Y
    Y
    Y/N(具体的な説明が必要)
    N
    default
    Y
    Y
    Y
    N
    N
    private
    Y
    N
    N
    N
    N
  • は、プライベート属性に対して、共通の方法でアクセスを提供する.例:
  • class Student {
        private int age;
        private String name;
        public void setAge(int age) {
            this.age = age;
        }
        public int getAge() {
            return age;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getName() {
            return name;
        }
    }
    public class StudentDemo {
        public static void main(String[] args) {
            Student s = new Student();
            s.setAge(19);
            s.setName("lyx");
            System.out.println(s.getAge());
            System.out.println(s.getName());
        }
    }
         :19 
               lyx

    以上のコードでは、Studentクラスのageとname変数をプライベート化し(ageとnameをStudentクラスにカプセル化する)、クラスの外部で直接アクセス(修正と読み取り)することはできません.しかし、Studentクラスで共通メソッドsetとgetをそれぞれ定義することで、それらへのアクセスを実現することができます.
    プライベートはパッケージの表示形式にすぎません.
    公開メソッドを外部に提供してアクセスするのは,アクセス方式に論理判断文を加えることができるからである.アクセスしたデータを操作し、コードの堅牢性を高めます.
    上記の例ではsetAge法によりageを修正したが,ageの値は合理的な数値に設定する必要があり,ageの値をチェックせずに設定するといくつかのエラーが発生する可能性がある.例えばageの合理的な値が[000]であれば、setAgeという方法のコードを以下に変更することができます.
    public void setAge(int age) {
            if(0<=age && age<=100)
                this.age = age;
            else
                System.out.println("age  ");
        }

    上記のような修正を行った後、ageの値が合法でない場合、ヒントが表示されます.
    参考資料:https://www.runoob.com/java/java-modifier-types.html#protected-desc