[JAVA]継承とは?

16667 ワード

📢 継承


継承とは、既存のクラスに機能を追加または再定義することによって新しいクラスを定義することです.
継承により、既存の定義クラスのすべてのフィールドメソッドを継承できます.
既存定義のクラスを親と呼び、継承によって作成されたクラスを子と呼びます.
class 자식클래스이름 extends 부모클래스이름{...}
* 상속은 위와 같은 문법으로 진행됩니다.

継承を使用する理由

  • は、既存に作成されたクラスを回収します.
  • 子クラスを設計するときに親クラスの重複メンバー変数が存在する場合は、作成する必要はありません.
  • クラス間の階層関係を構成します.
  • class Car {
        public int speed = 10;
        public String color ="red";
    }
    
    class SuperCar extends Car{
        void print(){
            System.out.println("차량의 속도 : "+speed);
            System.out.println("차량의 색 : " +color);
        }
    }
    上記のコードは、SuperCarが変数を割り当てていないことを示していますが、親の変数を使用できます.

    📢 Super


    スーパーキー


  • スーパーキーは、親から継承されたフィールドまたはメソッドをサブアイテムが参照するときに使用される変数です.
    	* 비슷한 예로 클래스의 this 키워드를 생각하면 좋습니다!!
  • super()メソッド


  • super()メソッドは、親クラスの作成者を呼び出すために使用されます.

  • 通常、コンパイラによって自動的に挿入されます.

  • 親にデフォルトのジェネレータがない場合にsuper()に書き込むとエラーが発生します.
  • 📢 Method overriding


    継承は、親メソッドを入力するときに再定義できます.上書きと呼ばれます.
    class Car {
        int speed = 10;
        String color ="red";
    
        void print(){
            System.out.println("차량의 속도 : "+speed);
            System.out.println("차량의 색 : " +color);
        }
    }
    
    class SuperCar extends Car{
        String sound = "부릉";
    
        @Override --> //이놈은 친절히 오버라이드에요~~ 라고알려주는 놈이다.
        void print() {
            System.out.println("차량소리 : "+sound);
        }
    }
    上図に示すように、オーバーライドは親関数を再定義する機能です.
    したがって、関数名、戻り値、パラメータは同じでなければなりません.
    🧨 では名前は同じですが、パラメータが違う場合はどうなりますか?
    class Car {
        int speed = 10;
        String color ="red";
    
        void print(){
            System.out.println("차량의 속도 : "+speed);
            System.out.println("차량의 색 : " +color);
        }
    }
    
    class SuperCar extends Car{
    
        //@Override
        void print(String sound) {
            System.out.println("차량소리 : "+sound);
        }
    }
    上記のように、関数名が同じでパラメータが異なる場合はオーバーロードされます.

    📢 ダイナミックメソッドの派遣


    ダイナミックメソッドの派遣については、まず派遣について理解する必要があります.

    Dispatch


    プログラムがメソッドを実行するためにどのメソッドを呼び出すかを決定するプロセス.
    Dispatchには2種類あります.
    1. Static Dispatch
  • コンパイル時、コンパイラがどのような方法を実行すべきか知っている場合、
  • class Car {
        int speed = 10;
        String color ="red";
    
        void print(){
            System.out.println("차량의 속도 : "+speed);
            System.out.println("차량의 색 : " +color);
        }
    
        public static void main(String[] args) {
            SuperCar superCar = new SuperCar();
            superCar.print();
        }
    }
    
    class SuperCar extends Car{
        String sound = "부릉";
    
        void print() {
            System.out.println("차량소리 : "+sound);
        }
    }
    上のコードに示すように、SuperCar.印刷()の場合、SuperCarクラスの上書き関数が呼び出されます.コンパイラもそれを知っていれば,静的メソッド派遣と呼ぶ.
    2. Dynamic Dispatch

  • Static Dispatchとは逆に、コンパイラはどのメソッドを呼び出すか分かりません.

  • この場合、実行時点で呼び出しの方法が決定される.
  • 3.DoubleDispatchの部分はまだ分かりません.

    📢 抽象クラス


    抽象クラスとは、1つ以上の抽象メソッドを持つクラスを指します.
    抽象クラスにはabstractが含まれ、サブクラスに抽象メソッドを定義するように強制する必要があります.
    抽象クラスは普通のクラスとあまり違いはありませんが、抽象的な方法があります.

    抽象メソッド


    抽象メソッドは上書きして使用する必要があります.
    構文abstrcatは、タイプメソッド名()を返します.
    前述したように、宣言部分のみで実施部分がないため、過剰な調整が必要である.

    📢 finalキーワード


  • finalキーワードは、変数、メソッド、クラスに使用できます.

  • finalキーワードの貼り付けは、貼り付けられた内容を制限することを意味します.

  • finalがclassに追加されると、クラスは変更できないクラスになります.

  • メソッドにfinalがある場合、オーバーライドは再定義できません.

  • 変数にアタッチすると、この値は変更できない定数になります.
  • final String hello = "Hello world";
    
    hello = "hoChul"--> 에러
    ------------------------------------------------
    final class Car{ // 변경불가능한 클래스
    	final int speed = 100; // 값 변경 불가능
    
    	final void getSpeed(){
        	return speed; // 오버라이딩 불가능
        }
    }
    
    SuperCar extends Car{... <-- 오류
    }
  • のコードに示すようにfinalキーワード付きの値は初期化後は変更できません.
  • 📢 Object


  • JAvaの最上位クラス.

  • 作成したすべてのクラスにはobjectのデフォルトメソッドが含まれています.

  • Objectクラスにはフィールドは含まれておらず、11のメソッドのみで構成されています.
  • objectメソッドタイプ


    🎈ソース:http://www.tcpschool.com/java/java_api_object