Javaオブジェクト指向-継承

Javaオブジェクト指向

著者q:2835916127

1.継承

1.継承の実装

  • 継承の概念:

    • 継承は、オブジェクト指向の3つの主要な特性の1つです。継承により、サブクラスに親クラスの属性とメソッドを持たせ、サブクラスで再定義し、サブクラスの新しいメソッドを追加できます。
  • 継承された形式を実装する

格式 : class 子类 extends 父类{
    
     }
  • 例えば:
class Dog extends Animal {
    
     }

ここでは詳細な例は示しません

  • 継承の利点:

    • コードの再利用性の向上(複数のクラスの属性は基本クラスでのみ宣言する必要があります)
    • コードの保守性を向上させます(変更が必要な場合は、1つのポイントのみを変更する必要があります)
  • 継承のデメリット

    • 継承により、サブクラスと親クラスの関係が作成され、クラスの結合が強化されます。親クラスを変更する必要がある場合、サブクラスを変更する必要があるため、サブクラスの独立性が弱まります。
  • 継承の使用

    • 継承を使用するには、クラスとクラスの間に関係があるかどうかを考慮する必要があり、継承を盲目的に使用することはできません。
      • の関係は... a:誰が一種の人であるか。たとえば、教師と学生は一種の人間であり、その人は親であり、学生と教師はサブカテゴリです。

2.継承されたアクセス特性

可変アクセス特性

  • サブクラスの変数にアクセスするには、近接の原則が採用されています
  1. サブクラスのローカルスコープで検索
  2. サブクラスのメンバーのスコープで検索します
  3. 親クラスのメンバーメソッドで検索します
  4. 3つのうちどれも見つからない場合は、エラーを報告してください(父親の父親は考慮されていません)

オブジェクトのアクセス特性

  • 作成する

これとスーパー

  • これ:現在のクラスオブジェクトへの参照

  • super:親オブジェクトへの参照

  • コンストラクタ:

    • これ(パラメーター1、パラメーター2 ...)
    • super(パラメーター1、パラメーター2 ...)

注:親クラスのsuper()コンストラクターは、サブクラスが作成されるときにデフォルトで呼び出されます

  1. サブクラスオブジェクトを作成するときに、親クラスのコンストラクターを明示的に呼び出さないと、親クラスのsuper()メソッドがデフォルトで呼び出されます。
  2. 親クラスのコンストラクターを呼び出す必要がある場合は、サブクラスコンストラクターの最初の文にsuper(パラメーター1、パラメーター2 ...)配置する必要があります。
  3. 1つのサブクラスに対して親クラス構造を複数回呼び出すことはできません。
    推奨される記述:クラスを作成するときにデフォルトの構造を使用してください

メソッドの書き換え:

  • オーバーライドの概念:親クラスと同じメソッド宣言がサブクラスに記述されます。つまり、メソッド名とパラメータータイプは同じです。
  • アプリケーションシナリオ:サブクラスに親クラスの関数が必要であり、サブクラスのメソッドに独自のメソッドがある場合、この時点で親クラスのメソッドをオーバーライドできます。
  • アノテーション@Override使用して、サブクラスで宣言されたメソッドが親クラスからのものであるかどうかを検証し、[検証]関数のを再生できます
    1. 親クラスのプライベートメソッドをオーバーライドすることはできません(プライベートメンバーと親クラスのメソッドをサブクラスに継承することはできません)
    2. サブクラスのアクセス許可は、親クラスより低くすることはできません(パブリック>保護>デフォルト(書き込み許可なし)>プライベート)

public class Fu {
    
    
    private void show() {
    
    
        System.out.println("Fu中show()方法被调用");
    }

    void method() {
    
    
        System.out.println("Fu中method()方法被调用");
    }
}

public class Zi extends Fu {
    
    

    /* 编译【出错】,子类不能重写父类私有的方法*/
    @Override
    private void show() {
    
    
        System.out.println("Zi中show()方法被调用");
    }
   
    /* 编译【出错】,子类重写父类方法的时候,访问权限需要大于等于父类 */
    @Override
    private void method() {
    
    
        System.out.println("Zi中method()方法被调用");
    }

    /* 编译【通过】,子类重写父类方法的时候,访问权限需要大于等于父类 */
    @Override
    public void method() {
    
    
        System.out.println("Zi中method()方法被调用");
    }
}

予防:

  • Javaは単一の継承(複数の息子を持つ父親)のみをサポートします

  • Javaのクラスは、多層継承をサポートします

  • 書き換えとオーバーロードの違いに注意してください

    • 書き換え:サブクラスは親クラスのメソッドをオーバーライドします
    • オーバーロード:同じクラスで、メソッド名は同じですが、パラメーターの数またはタイプが異なります

最後の

  • Finalは、メンバーメソッド、メンバー変数、クラスなどの最終的な意味を表します。

    • 最終的に変更されたクラス
    • 最終的に変更されたクラス:このクラスは継承できません(サブクラスを持つことはできませんが、親クラスを持つことはできます)
    • 最終的に変更されたメンバーメソッド:このメソッドはオーバーライドできません
    • 最終的に変更されたメンバー変数:変数が定数であり、再割り当てできないことを示します
  • 基本データ型の最終変更

    • 最終的に変更された基本データ型、その値は変更できません
    • 最終的に変更された参照タイプ:参照タイプのアドレス値は変更できませんが、アドレスの内容は変更できます
  • 例えば

public static void main(String[] args){
    
    
    final Student s = new Student(23);
  	s = new Student(24);  // 错误
 	s.setAge(24);  // 正确
}

静的

  • 概念:静的は静的な意味であり、メンバーメソッドメンバー変数を変更できます

  • 特徴:

    • クラスのすべてのオブジェクトで共有され、これは静的の使用を判断するための条件でもあります
    • クラス名で呼び出すことができます(推奨
      静的アクセス特性
  • 非静的メンバー方式
    • 静的メンバー変数にアクセスできます
    • 非静的メンバー変数にアクセスできます
    • 静的メンバーメソッドにアクセスできます
    • 非静的メンバーメソッドにアクセスできます
  • 静的メンバーメソッド
    • 静的メンバー変数にアクセスできます
    • 静的メンバーメソッドにアクセスできます
  • 一文に要約:
    • 静的メンバーメソッドは静的メンバーにのみアクセスできます

おすすめ

転載: blog.csdn.net/weixin_42143994/article/details/109864102