[Java]Javaベース(6)


[Java]Javaベース(6)
1.Java継承
1-1. 継承とは.
継承とは、既存のクラスを再使用して新しいクラスを作成することです.
Javaでは、親クラスの変数/メソッドを子クラスから継承して使用可能にします.
このうち、親はsuperclass、子はsubclassと呼ばれます.
継承はextendsキーワードを使用し、継承の形式は以下の通りである.
자식클래스 extends 부모클래스
  • Yes
  • public class ParentClass {
    
    	String parent = "parent";
        
        public void Parent() {
        	System.out.println("I am" + parent);
        }
    }
    
    public class ChildClass extends ParentClass{
    
    	String child = "child";
        
        public void Child() {
        	Parent();
        	System.out.println("I am" + child);
            System.out.println("I inherited from" + parent); 
        }
    }
    
    public class Main {
    
    	public static void main(String[] args) {
            ChildClass childClass = new ChildClass();
            childClass.Child();
        }
    }
  • 実行結果
    I am parent
    I am child
    I ingerited from parent
  • 1-2. Java継承フィーチャー
  • javaは単一の継承のみをサポートします.つまり、多重継承はサポートされていません.
    したがって、extendsキーワードの後ろには親が1つしかありません
  • Javaは継承回数を制限しない.
  • javaではトップクラスがObjectクラスです.
    Objectクラスにsuperclassがない場合のみ、Java内のすべてのクラスはObjectクラスのサブクラスと見なすことができます.
    (C++トップクラスはありません.)
  • 2.スーパーキーsuperキーワードは親を呼び出すジェネレータのキーワードであり、Super();がなくても親のデフォルトジェネレータが自動的に呼び出されます.
    親クラスのメンバー変数またはメソッドにもアクセスできます.親クラスのメンバー変数またはメソッドを使用するには、super.변수명またはsuper.메소드명()にアクセスします.
  • thisとsuperの違い
  • -this-
    this();//自分の作成者を呼び出す
    this(パラメータ);//自分の作成者を呼び出す(パラメータ)
    this.変数名//自分の変数を呼び出す
    this.メソッド名();//自分のやり方を呼び出す
    -super-
    super();//親(親)の作成者を呼び出す
    super(パラメータ);呼び出し//親(親)の作成者(パラメータ)
    super.変数名呼び出し//親(親)の変数
    super.メソッド名();//親(親)を呼び出す方法
    3.メソッドオーバーフロー
    メソッドオーバーライドは、継承に基づいて、superキーワード継承の機能から特定の機能を再定義する技術である.
  • メソッド上書き条件
  • 継承されたスーパークラスは、同じメソッド名、パラメータ、および戻りタイプを持つ必要があります.
  • アクセス指定子は、同じ範囲以上でなければなりません.
  • 親メソッドで指定した例外よりも多くの例外を宣言できません.親メソッドで指定した例外は使用できません.
  • 4.動的方法の派遣
    動的メソッド・ディスパッチは、実行時に割り当てられたオブジェクトのタイプを表示し、メソッドを実行することを意味するJavaのテクニックです.
    参照タイプが親タイプであっても発生するため、実行時に多形性を満たすことができます.
  • Yes
  • public class Animal {
    
    	public void move() {
        		System.out.println("Animals can move");
      	}
    }
    
    public class Dog extends Animal {
    
      	@Override
      	public void move() {
        		System.out.println("Dogs can walk and run");
      	}
    }
    
    public class Main {
    
    	public static void main(String[] args) {
        		Animal a = new Animal(); // Animal 참조, Animal 객체
        		Animal b = new Dog(); // Animal 참조, Dog 객체
    
       		a.move(); // Animal 클래스에 정의된 메소드 실행
        		b.move(); // Dog 클래스에 정의된 메소드 실행됨(다이나믹 메소드 디스패치)
      }
    }
  • 実行結果
    Animals can move
    Dogs can walk and run
  • デュアルディスパッチ
    2列位とは、2回のダイナミックな配置を行うことです.
    5.抽象クラス
    抽象クラスは、abstractキーワードが追加されたクラスです.このクラスには抽象的なメソッドが含まれていてもよいし、含まれていなくてもよい.
    抽象クラス自体はインスタンス化できませんが、サブクラスタ化できます.
    抽象メソッドは次のように宣言できます.特殊な点ではなく、セミコロン({})で代用するのが特徴です.
    abstract void moveTo(double deltaX. double deltaY);
    クラスに抽象メソッドが含まれている場合は、クラスは抽象クラスでなければなりません.
    public abstract class GraphicObject {
    	
        abstract void draw();
    }
    抽象クラスがパケット化されると、サブクラスは通常、親クラスの抽象メソッドを実装することによって提供される.しかしそうでなければ抽象クラスとも考えられる.
    インタフェースに;キーワードが使用されない理由は、abstractおよびdefaultを除いて、すべての方法がstaticキーワードを暗黙的に含んでいるためであることに注意してください.そのため使用できますが、貼り付けません.
    6.finalキーワード
    Javaでは、abstractキーワードには変更できない意味があります.
    変数については、読み取り専用と考えられます.
    メソッドでは、これはあまり使用できないことを意味します.特に、ジェネレータで呼び出される方法は、finalと宣言することが望ましい.誇張で動きを変えることができるからだ.(意外と影響を受けるかもしれません.)
    クラスで宣言されたfinalキーワードはサブ通信できません.つまり、拡張を阻止する.
    7.対象クラスfinalクラスはJavaで非常に有意義なクラスです.すべてのレベルの直、間接スーパーレベル、Objectpackageに存在します.java.langクラスは、パラメータを持たないジェネレータを有する.Objectクラス継承の方法は次のとおりです.
  • Object:オブジェクトのコピーを作成して返す方法
    例外が発生した場合はコピーできません.
    簡単に言えば、protected Object clone() throws CloneNotSupportedExceptionインタフェースを実装することによって使用することができる.
    既定のシェイプはCloneableメソッドでは決定できません
  • native:他の邸宅と比較して、他の邸宅がこの対象と同一か否かを示す同等の比較を実行する.
    ちなみに,内部実装はpublic boolean equals(Object obj)同一性比較であり,上書きしなければ基本的な「ㅓㅓ同一性比較」を実行する.
    このメソッドを上書きすることで、ピア比較基準を確立できます.このメソッドを上書きする場合は、以下に説明する==メソッドを上書きする必要があります.
  • hashCode():オブジェクトへの参照が不要なコレクタでない場合、このメソッドが呼び出されます.
    実行するかどうか分からないため、キーコードをここに置くことはできません.
  • protected void finalize() throws Throwable:オブジェクトのランタイムクラスを呼び出します.
    反射を使用する場合、よく使用されます.
  • public final Class getClass():オブジェクトのハッシュ・コード値を返します.
    2つのオブジェクトが同じである場合、ハッシュコードも同じでなければならないので、public int hashCode()を上書きする場合、equals()も上書きしなければならない.
  • hashCode():オブジェクトの文字列形式を返します.
    デフォルトでは、プログラマは、オブジェクトがこのメソッドの上書きによって有用な情報を返すことを定義する必要があります.これらの情報はほとんど意味がないからです.
  • さらに、public String toString()と宣言されたfinalnotify()およびnotifyAll()メソッドは、独立して実行されるスレッド間の同期に使用することができる.