ZJU-java Advanced Notes Week 4(継承と多態性)

  1. 継承は、オブジェクト指向言語の重要な特性の1つです。継承のない言語は、「オブジェクトベースの言語」とのみ呼ぶことができます。

  2. サブクラスは親クラスからすべてのメンバーを継承します
    ①コンストラクターを除いて、結局、コンストラクターは親クラスと同じ名前です
    ②取得しても、気軽に使用できるわけではありません。
    ここに写真の説明を挿入

  3. 親クラスにすでに存在するメンバー変数を再定義しようとすると、親クラスのメンバー変数とはまったく関係のない変数を定義します。子クラスでは、子クラス(親)で定義された変数にアクセスできます。クラスは非表示です)、親クラスのメソッドで親クラスにアクセスします。それらは同じ名前ですが、相互に影響を与えることはありません

  4. 親クラスのコンストラクターは、サブクラスのコンストラクターの前に呼び出されます

  5. ワードクラスのコンストラクターの最初の文super()は、パラメーターに従って親クラスのどのコンストラクターが呼び出されるかを示します。

  6. サブクラスのオブジェクトを作成するときは、最初に、親クラスが所有するメンバー変数が適切に初期化されている
    ことを確認する必要があります。参照先:初期化とコンストラクターの定義

  7. このようなthis.title = titleだけでないコンストラクター

  8. 親クラスのメンバー変数をプライベートから保護に変更する方法はありません。
    例:サブクラスZhongyuan

System.out.println("DVD:"+title+":"+director);

今に変更されました

System.out.print("DVD:");
super.print();
System.out.print(director);

親クラスに参加する

public void print(){
    
    
    System.out.print(title+" ");
}

このように、親クラスのメンバーのタイトルをプライベートから保護に変更する必要はありません。

  1. Javaでオブジェクトタイプを保持するすべての変数は、多態性変数です。「多形性」(文字通り多くの形式を意味する)という用語は、さまざまなタイプ(つまり、宣言されたタイプまたは任意のサブタイプ)のオブジェクトを保持できる変数を指します。
Car myCar = new Car();

つまり、サブクラスのオブジェクトは、次のような親クラスのオブジェクトとして使用できます。①親クラスに
割り当てられた変数(上方モデリングが発生します
(モデリングでは、あるタイプのオブジェクトを別のタイプの変数に割り当てます)
上方モデリング前に括弧を入れたり、括弧にタイプを入れたりする必要はありません、それは常に安全です

②親オブジェクトを必要とする関数に渡す

③親オブジェクトを格納するコンテナに入れます

public void list(){
    
    
   for(Item item:listItem){
    
    
      item.print();
   }
}

すべての変数には、静的と動的の2つのタイプがあると考えてください。
静的が表示されます。たとえば、ここにアイテムタイプがあります。
動的は、プログラムがここまで実行して実際に管理するオブジェクトのタイプです

。11。親クラスオブジェクトをサブクラスオブジェクトに割り当てる場合は、
例1をモデル化することによってのみ

Vechicle v;
Car c = new Car();
v = c;//可以
c = v;//编译报错
c = (Car) v;//向下造型,当且仅当v这个变量实际管理的是Car类型

例2(注:アイテムはCDクラスの親クラスです)

Item item = new Item("行路易知难", 0, "优秀公众号");
CD cd = new CD("深夜书店","许嵩",2, 10, "超好听");
item = cd;(item的动态类型变成cd了,静态未变)
CD cd2 = (CD)item;
  1. Javaでオブジェクトをオブジェクトに割り当てると、実際には2人のマネージャーが共通のオブジェクトを管理できます(これはOOP言語の場合です)。
String s = “hi”
s = “bye”

hiをbyeに置き換える代わりに、sによって管理されるコンテンツが変更され、元々はhiを指し、現在はbyeを指しているだけです。

  1. モデリングキャストの標準定義
    ここに写真の説明を挿入

タイプ変換とは

int i = (int)10.2

スタイリングはあなたを別のタイプとして扱うだけで、あなたを別のタイプに変えることはありません

上向きのスタイリングは常に安全です

  1. Javaのデフォルトの動的バインディング
    バインディング:オブジェクト変数が関数を呼び出すときに、呼び出すものを決定します。
    静的バインディング:
    変数の宣言(静的)タイプに従ってバインドする動的バインディングを決定します。変数の動的タイプに従ってバインディングを決定します。これ
    は、メンバー関数で他のメンバー関数を呼び出すものです。これは、次のように表現できるため、動的バインディングと見なすこともできます。
    たとえば、親クラスItemのprint()関数は次のようになります。
    public void print(){
    
    
        System.out.print(title+" ");
}

そして出力は

CD:深夜书店 许嵩(title是”深夜书店”)

これは、サブクラスCDのprint()関数が次のとおりであるためです。

    public void print() {
    
    
        System.out.print("CD:");
        super.print();
        System.out.print(artist);
}

item.print();実際にはサブクラスのprint()と呼ばれます

  1. カバレッジ:サブクラスと親クラスに同じ名前とパラメーターを持つ関数がありこの関数のペアはカバレッジ関係を構成します。
    親クラスの変数を介してオーバーレイ関係の関数を呼び出すと変数によって管理されるオブジェクトが属するクラスの関数が呼び出されます。

  2. Javaのすべてのクラスは、宣言されているかどうかに関係なく、Objectのサブクラスです(C ++を除くほとんどすべてのOOP言語は、このような単一ルート構造を実装しています)

Objectクラスは、関数
toString()を提供します[オブジェクトの文字列表現を返します] [生成によってオーバーロードされます]
equals()[2つのオブジェクトが同じかどうかを比較します]
...オブジェクトの
取得方法
o = new Object();
o。 ..。

CD cd = new CD("奇妙能力歌","陈粒",1, 5, "好听");
CD cd1 = new CD("奇妙能力歌","陈粒",1, 5, "好听");
System.out.println(cd.equals(cd1));

出力

false

理由:CDクラスには独自のequals()がないため、Objectを使用して2つのマネージャーが同じオブジェクトを管理しているかどうかを判断します。
解決策:generateを使用してCDのequalsをオーバーロードします。つまり、次のコードを追加します。

    @Override
    public boolean equals(Object obj) {
    
    
        CD cc = (CD)obj;//向下造型
        return artist.equals(cc.artist);
}

新しい出力

true

注:@Overrideを参照してください。サブクラスと親クラスの関数の署名(関数名とパラメーター)は同じである必要があります

おすすめ

転載: blog.csdn.net/weixin_44997802/article/details/108515120