[学習]Javaの定式11日目


(Ch7) 1. ~3.5静的インポート文の継承
クラス間の関係-継承とは何ですか?
既存のクラスを再使用して新しいクラスを作成する方法です.継承により重複するコードを減らし、汎用コードを使用することができるため、管理が容易になります.
//Child_class(자손 클래스), Parent_class(조상 클래스)
class Child_class extends Parent_class{
	// Child_class에 해당하는 코드 작성
}
継承はextendsを作成するクラスに添付し、継承するとChild classにはParent classによって記述されたコードも含まれます.包含関係と理解される場合、Child classはParent classを含むので、より大きな概念と見なすことができる.
継承には2つの特徴があります.
  • ジェネレータおよび初期化ブロックは送信されない.メンバーのみを継承します.
  • サブクラスのメンバー数は、祖先クラス以上です.
  • クラス間の関係-含まれる関係とは何ですか?
    継承に加えて、クラスを再利用する方法で包含関係を確立することもあります.次のコードを見てください.
    class Point {
    	int x; //x좌표
        int y; //y좌표
    }
    
    class Circle{
    	int x; // x좌표
        int y; // y좌표
        int r; // 반지름(radius)
    }
    
    円を表すクラス(Circle)と座標を表すクラス(Point)があります.実際、この2つのクラスは座標平面上のx、y座標を定義する必要があり、この点は共通の性質を持っているため、以下に要約することができる.
    class Point {
    	int x; //x좌표
        int y; //y좌표
    }
    
    class Circle{
        Point p = new Point(); 
        int r; // 반지름(radius)
    }
    
    extendsを使用しないで、他のクラスをメンバー変数として宣言すると、コードの重複を回避し、効率的に管理できます.では、前に学んだ継承と含む関係の違いは何でしょうか.
    上記の例を継承関係として示します.
    class Circle extends Point{ 
        int r; // 반지름(radius)
    }
    
    結果的に継承と包含関係に差はない.この場合,is−aとhas−aを加えて比較すると,どれが適切であるかを知ることができる.
    Circle is a Point.//is-a自然なら継承関係
    Circle has a Point.//has-a自然包含関係
    2つの文を見ると、2つ目の文がもっと適切であることがわかります.したがって、CircleクラスとPointクラスは、包含関係として使用するのに適しています.
    単一継承の原則
    Javaは、1つの祖先クラスからのみ継承できる単一の継承原則を堅持しています.複数の継承を許可すると、コードがより簡潔になる可能性がありますが、クラス間の関係が非常に複雑になり、管理が困難になるという欠点があります.
    Objectクラスとは?
    Objectクラスは最上位に存在する祖先クラスであり、継承されていないクラスではコンパイラが自動的にObjectクラスを継承します.したがって,先祖クラスに沿って上に進むとObjectクラスで遭遇する.
    オーバーライド(Override)
    祖先クラスを継承するとメンバーが継承されるので、メソッドも使用できます.ただし、祖先クラスで使用される方法とは異なり、サブクラスに適用する必要がある場合があります.この場合、祖先クラスを上書き(変換)する方法で、サブクラスで使用できます.
    class Point {
    	int x;
        int y;
        
        String getLocation(){
        	return "x :" + x+ "y : "+y;
        }
    }
    class Point3D extends Point{
    	int z;
        
        String getLocation() {
        	return "x :" + x+ "y : "+y + "z : "+z;
        }
    }
    Pointクラスを継承するPoint 3 Dクラスは、既存の2 Dで使用されている座標を返すgetLocationメソッドを3 D使用に拡張します.追加のz座標が必要なので、z座標を追加して上書きします.過度に使用する場合、既存のPointクラスを使用しているユーザも暗記する必要はなく、同じ効果を期待して使用するため、積極的な効果が生じる.
    上書き条件(子のメソッドと親のメソッド)
    1.名前は同じにします.
    2.パラメータは同じでなければなりません.
    3.戻りタイプは同じである必要があります.
    要約すると、宣言に存在するすべての値が一致しなければならない.ただし、アクセス制御者と例外は、限られた条件で変更できます.
  • アクセス制御者は、祖先クラスメソッドよりも狭い範囲に設定できません.
  • 例外の個数は、祖先クラスの方法よりも少ないはずです.
  • インスタンスメソッドを静的メソッドまたはそのドメインに変更することはできません.
  • super/super()の概念
    前にthisという言葉を使用して領域変数に分割したり、他のジェネレータを呼び出したりします.これと同様に,継承されたメンバーと自分のメンバー名を区別するためにsuperを用いる.
    class SuperTest {
        public static void main(String args[]){
        Child c = new Child();
        c.method();
        }
    }
    class Parent{
        int x=10;
    }
    class Child extends Parent{
        int x=20;
        
        void method(){
        	System.out.println("x = "+x);
           	System.out.println("this.x = "+this.x);
    	System.out.println("super.x = "+super.x);
        }
    }
    //실행결과
    // x=20
    // this.x = 20
    // super.x = 10
    実行結果から,Childクラスではx値が変更されているが,Parentが使用するx値には影響しないためsuperであることが分かる.xの値出力が10であることがわかります.これは、変数とメソッドにsuperを追加することによって呼び出すことができます.
    thisとthis()が区別されているように、super()の役割も存在します.this()は同じクラスの他のジェネレータを呼び出すために使用され、super()は祖先クラスのジェネレータを呼び出すために使用されます.super()もジェネレータコードの最初の行から呼び出さなければなりません.そうしないと、コンパイラはsuper()を自動的に呼び出します.挿入
    义齿
    パッケージはクラスの集合です.関連するクラスをグループ化することで、これらのクラスを効率的に管理でき、他のパッケージの同じ名前のクラスに存在する可能性があるため、名前の競合を防止できます.パッケージは、コメントとスペースを除く最初の行で宣言する必要があります.1つのソースファイルで1回しか宣言できません.
    Reference
    Javaの定義
    南宮城の結晶石コード