JAVA(ジェネレータ、過負荷、過負荷)


サマリ

  • 作成者(Constructor)
  • 過負荷
  • overriding
  • コンストラクタ


    new演算子とともに使用し、クラスからオブジェクトを作成するときに呼び出され、オブジェクトの初期化を担当します.
  • レベルとメソッド名は同じです.
  • 返却価格は
  • ではありません.
  • クラスがインスタンス化されたときに直ちに実行される方法.
  • 戻り値がないことを示すvoidを記入する必要がありますが、生成者全員が戻り値を持っていないため、voidは省略します.
    class Constructor {
        Constructor() {  // ← 요함수가 생성자
        	code...;
        }
    }

    かふか


    C言語などのプログラム向け言語では,1つの関数で1つの機能しか実現できない.ただし,Javaでは,1つのメソッド名を用いて複数の機能を実現することができる.
    かふかじょうけん
  • メソッドの名前は同じで、パラメータの個数またはタイプは異なる必要があります.
  • class Main(){
        int i = 0;
        String s = A;
        
        Overload var = new Overload();
        var.method();
        var.method(s);
        var.method(s, i);
        // 각각 3개의 메소드는 이름은 같지만, 각각 다른기능을 한다.
    }
    
    class Overload() {
        void method() {
            code...;
        }
        int method(String s){
            code...;
            return s;
        }
        String method(String s, int i){
            code...;
            return i
        }
    }

    過剰


    子クラスでの親からの継承方法の展開と再定義
    ※相続(相続)
  • の既存定義クラスのすべてのフィールドとメソッドを継承します.
  • が関係を継承する場合、参照タイプを親にインスタンス化し、オブジェクトタイプを子にインスタンス化できます.
  • 例外は、親メソッドよりも多く宣言できません.
  • extends(継承)
  • の典型的な形態の継承
  • は親メソッドを採用し、多くのブートを必要とせずに直接親に
  • を実現する.
  • ジャワは多相速をサポートしていません(ツールは多相速の代わりに使用できます).
  • public class Main {
        public static void main(String[] args) {
            Mother mother = new Mother();
            Son son = new Son();
            
            son.printMotherAge();
        }
    }
    
    class Mother {
        int motherAge = 50;
        
        Mother() {
            System.out.println("welcome to Super class");
        }
        
        public void printMotherAge() {
            System.out.println("Mother's Age : " + motherAge);
        }
    }
    
    class Son extends Mother {
        int sonAge = 23;
        
        Son() {
            System.out.println("welcome to sub class");
        }
    }
    Mother mother = new Mother();
    Mainクラスでは、Motherクラスがインスタンス化され、コンストラクション関数が実行されます.
    Son son = new Son();
    class Son extends Mother {
        int sonAge = 23;
        Son() {
            System.out.println("welcome to sub class");
        }
    }
    SonクラスはMotherクラスを継承している.Mainクラスでは、Sonクラスがインスタンス化されると、継承されたMotherクラスのジェネレータを一度実行し、独自のジェネレータを実行します.
    son.printMotherAge();
    sonオブジェクトのメソッドにはprintMotherAgent()という関数は含まれませんが、Motherクライスを継承しているため、使用できます.
    結果

    implements(継承)
  • ツールは、多相金属の代わりに使用することができる.
  • classではなく、インタフェースです.
  • を継承するclassは、親メソッド(overriding)を再定義する必要があります.
  • 継承が多い場合、2つ以上の親インタフェースには同じ名前の変数があり、変数を使用する場合もその変数を再定義します.
  • と2つのインタフェースには同じ名前の関数があります.関数に機能がある場合は、資料型の前にdefaultという関数を記入します.
  • ※再定義が必要な理由
    なぜなら、1:1継承なら大丈夫だが、いずれも中上詐欺であれば「ダイヤモンド問題」が発生するからだ.

    ※ダイヤモンド問題
    上記の例に示すように、GrandFatherクラスにmyMethod()というメソッドがあるとします.そして、もしFatheraとFatherbが相互運用を実現していたら、FatheraとFatherbを同時に継承するSonクラスにとって、どの親のmyMethod()を使うべきなのでしょうか?これによって衝突が生じる.
    関連項目:https://siyoon210.tistory.com/125
    public class ImpleTest {
        public static void main(String[] args) {
            InterfaceExam test1 = new InterfaceExam();
            test1.func1();
            System.out.println();
            InterfaceTest1 test2 = new InterfaceExam();
            test2.func1();
        }
    }
    
    interface InterfaceTest1 {
        int num = 123;
        
        void func1();
        void func2();
    }
    
    interface InterfaceTest2 {
        int num = 1234;
    
        void func1();
        void func2();
        void func3();
    }
    
    class InterfaceExam implements InterfaceTest1, InterfaceTest2 {
    
        InterfaceExam() {
            System.out.println("hahaha");
        }
        @Override
        public void func1() {
            System.out.println("hello");
        }
    
        @Override
        public void func2() {
            System.out.println("world");
        }
    
        @Override
        public void func3() {
            // TODO Auto-generated method stub
        }
    }
    interface InterfaceTest1 {
        int num = 123;
        void func1();
        void func2();
    }
    interface InterfaceTest2 {
        int num = 1234;
        void func1();
        void func2();
        void func3();
    }
    class InterfaceExam implements InterfaceTest1, InterfaceTest2 {
        InterfaceExam() {
            System.out.println("hahaha");
        }
        @Override
        public void func1() {
            System.out.println("hello");
        }
        @Override
        public void func2() {
            System.out.println("world");
        }
        @Override
        public void func3() {
            // TODO Auto-generated method stub
        }
    }
    InterfaceTest 1もInterfaceTest 2もInterfaceExamを継承していますが、メソッドを再定義しました.
    再定義しない場合は、エラーが出力されます.
    InterfaceExam test1 = new InterfaceExam();
    test1.func1();
    System.out.println();
    InterfaceTest1 test2 = new InterfaceExam();
    test2.func1();
    test 1とtest 2にはそれぞれ異なる参照フォーマットがあるが、同じ結果が見られる.
    結果
    ※@Overrideの用途
    @Annotationと直訳してコメントを表示します.これは一般的なコメントとは異なり、検証機能があります.
    コードチェック時に上書きが実際に実行されていない場合は、コンパイル時にエラーが出力されます.
    オーバレイアレンジ
  • extendsは通常のクラス継承に使用され、インタフェース継承に使用される.
  • classはclassを継承するときにextendsを使用し、インタフェースはインタフェースを継承するときにextendsを使用します.
  • classインタフェース使用時implements,
  • インタフェースはclassを使用するとインプリメンテーションに書き込めません.
  • extendsは1つのクラスしか継承できません.
  • extends自身のクラスは親の機能を使用します.
  • ツールは、複数のツールで使用できます.
  • は、設計目的のために使用することができる.
  • で実装されたクラスは、実装されたコンテンツを使用する必要があります.