[TIL]Java-多形性


たけいせい


多形性とは親のタイプを指し、様々な形式のサブオブジェクトを生成、参照することができる.
Student student = new Student(); // 대신
Person student = new Student(); // 를 사용하면

Person[] people = {new Person(), new Student(), new Teacher(), ...}; // 배열관리를 통해 동일 작업을 쉽게 할수있다.

ダイナミックバインド


コンパイル時に呼び出す方法と実行時に呼び出す方法の柔軟な応用を指す.

データ型が
  • の親Personを参照しても、メソッドの実行は実際に作成されたオブジェクトのメソッドで実行されます.
  • 前の
  • に示すように、コードを実行するときに、参照データ型ではなくオブジェクトタイプを実行する方法を動的バインドと呼ぶ.
  • Java言語における多形性と動的バインドの特性によるエラー
  • 多形性を使用してPerson参照データ型を持つStudent Object Studioを生成すると、コンパイラはStudentにフィールドまたはメソッドアクセスするときに参照データ型Personのみを表示します.コンパイラはStudioで不明です.したがって、student.study();という方法を呼び出すことはできない.
  • 鋳造オブジェクト

    ((Student)student).study(); // 해결!
    ((Teacher)teacher).study(); // 해결!
  • ()カッコを使用して鋳造を行うと、各クラスが持つメソッドを呼び出すことができます.
  • Student s2 = (Student) student;
    s2.study(); // 코드가 실행 가능할까?
  • 参照データ型がStudentに変換されているため、研究()メソッドを呼び出すのは問題ありません.このコードは図のように表示されます.同じオブジェクトですが、異なる変数はそのオブジェクトを指します.逆にstudentはPerson,s 2はStudentを参照する.
  • instanceof演算による判別対象


  • AインスタンスBの意味
  • AがBの子供か同じタイプならtrue
  • AがBの親であればfalse
  • Bの親が
  • Aの参照データ型と同じである場合、false
  • 親子関係に属さないインスタンスコンパイルエラー
  • trueはチェックしたタイプで、変換しても問題がないことを示し、falseは変換できないか問題が発生していることを示します.
  • は主に条件文
  • に用いられる.

    インタフェース


    インタフェースは、実装されていないメソッドで構成されます.
  • インタフェースの内部は、次のように構成されています.
  • public interface 인터페이스명 { // 인터페이스 선언
        public final static Data_Type 상수명 = 상수의_값; // 상수 선언
        public Return_Type 메소드명(파라미터1, 파라미터2, ...); // 추상 메소드 선언
    }

  • インタフェース内部で宣言される変数は、publicfinal staticの無条件です.
  • final静的キーワードを持つ変数は定数です.
  • 定数は値を変更することはできません.宣言時代に値を入力する必要があります.

  • インタフェース内部で宣言する方法は,体の抽象的な方法がない.

  • インプリメンテーションインタフェースのクラスでimplementsを使用してインプリメンテーション
  • インタフェースで宣言されたすべての抽象メソッドを実装する必要があります.
  • public class 클래스명 implements 인터페이스명 {
        // 인터페이스에 선언된 메소드 구현
    }

    内部、匿名クラス


  • 内部クラスとは?
  • クラスで宣言されたクラス.
  • は、特定のクラスでのみ使用されるクラスを内部クラスとして宣言します.
  • の内部クラスでは、外部クラスのメンバーに簡単にアクセスできます.
  • public class OuterClass { // 외부 클래스
        class InnerClass {} // 내부 클래스
    }

  • 内部クラスのタイプは、宣言位置のタイプと同じです.有効範囲は性徴路変数と類似しており,比較的理解しやすい.

  • インスタンスクラス
  • 外部クラスのメンバー変数宣言位置宣言は、インスタンスメンバーのように扱われます.
  • 外部クラスのインスタンスメンバーに関する作業を宣言します.


  • ネストされたクラス
  • 外部クラスのメンバー変数宣言位置宣言は、静的メンバーのように処理されます.
  • 外部クラスの静的変数で、メソッドに使用することを宣言します.


  • 地域カテゴリ
    宣言は
  • 外部クラスのメソッドで、メソッドの内部でのみ使用されます.
  • インスタンスクラスのフィーチャーを保持します.


  • 匿名クラス
  • クラスの名前が定義されていません.
  • クラスを同時に宣言して生成するので、使い捨てクラスです.

  • ダイヤルバック

  • コールバック(callback)とは、他のコードを買収することによって提供される実行可能なコードを指す.
  • コールバックを超えるコードは、必要に応じてこのコールバックを実行することができる.
  • Javaはインタフェースを使用してコールバックを実現する.
  • public class Sum {
        interface OnMaxNumListner { // 인터 페이스 정의
            void onMaxNumber(int number); // Sum 클래스 내부에 onMaxNumLisnter를 정의한다. 클래스를 따로 정의해도 크게 상관은 없다.
        }
        void setOnMaxNumListner(OnMaxNumListner listner) { //콜백함수 등록
            this.listner = listner;
        }
    }
    public static void main(String[] args) {
        OnMaxNumListner listner = new OnMaxNumListner() { // OnMaxNumListner를 구현한 익명 클래스
            @Override
            public void onMaxNumNumber(int number) {
                System.out.println(number);
            }
        }
        
        Sum sum = new Sum();
        sum.setOnMaxNumListner(listner);
    }