JAVAの基礎知識(8)

第VI章オブジェクト指向(上級)

目標:
1。継承の基本的な概念と実現を習得します。
2.継承実現のさまざまな制限をマスターします。
3.サブクラスオブジェクトのインスタンス化プロセスをマスターします。
4.メソッドオーバーライドの概念と実現をマスターします。
5.スーパーキーワードの役割をマスターします。
6.抽象クラスとインターフェースの基本的な概念と実用的なアプリケーションを把握します。
7.オブジェクトのポリモーフィズムの役割を把握します。
8.一般的なデザインパターンをマスターします。
9.Objectクラスの役割とそのメインメソッドの役割を把握します。
10.梱包の役割、および自動ボクシングと開梱の操作を把握します。
11.匿名内部クラスの使用をマスターします。

6.1継承の基本概念

フォーマットクラスの継承されたフォーマット

class 父类{
    
    }		//定义父类
class 子类 extends 父类{
    
    }//使用extends关键字实现继承

Javaでは、単一の継承のみが許可され、複数の継承は使用できません。つまり、サブクラスは1つの親クラスのみを継承できます。サブクラスは親クラスを持つことができ、親クラスは親クラスを持つこともできます。

継承されたサブクラスは、派生クラスと呼ばれることもあります。
extendsキーワードは、継承の関係を実現するために使用できますが、このキーワード自体の意味は「拡張」されます。より正確には、クラスは既存のクラスの機能を拡張します。他の本では、サブクラスはしばしば派生クラスと呼ばれます。

継承を使用する場合、子クラスは親クラスのプライベートメンバーに直接アクセスできませんが、子クラスは親クラスの非プライベートメソッドを呼び出すことはできますが、親のプライベートメンバーを直接呼び出すことはできません。クラス。

6.2.1サブクラスオブジェクトのインスタンス化プロセス

継承の操作では、サブクラスオブジェクトのインスタンス化の要件もあります。つまり、サブクラスオブジェクトは、サブクラス自体の構築メソッドをインスタンス化する前に、まず親クラスの構築メソッドを呼び出す必要があります。

サブクラスオブジェクトをインスタンス化する前に、親クラスのプロパティを初期化する必要があります。-

6.2.2メソッドのオーバーライド

継承関係にはメソッドオーバーライドの概念もあります。いわゆるメソッドオーバーライドとは、サブクラスが親クラスと同じ名前のメソッドを定義することを意味しますが、アクセス許可を考慮する必要があります。つまり、メソッドはによってオーバーライドされます。サブクラスは、クラスメソッドの親Stricterアクセス​​許可を超えることはできません。

サブクラスが親クラスと同じ名前のメソッドを定義しているが、サブクラス内のこのメソッドのアクセス権が拡張され、上書きの概念に準拠している場合、メソッドが上書きされると、サブクラスオブジェクトは上書きされたメソッドを呼び出します。サブクラスオーバーライドのメソッド権限が減ると、コンパイル時にエラーメッセージが表示されます。

サブクラスのメソッドで親クラスにアクセスするメソッドを今すぐ見つけたい場合は、superキーワードを使用してください。

サブクラスが親クラスと同じ名前の属性を宣言している場合、サブクラスに直接アクセスするとき、つまり、このクラスで属性を最初に見つけるときに、「最も近いアクセス原則」を採用する必要があります。親クラスの属性。「super。」属性形式を使用するだけです。

メソッドのオーバーロードと上書きの違い

1オーバーロード(オーバーロード)という単語オーバーライド(オーバーライド)
2定義メソッド名が同じで、パラメーターのタイプまたは番号が異なり、メソッド名、パラメータータイプ、および戻り値のタイプがすべて同じです
。3ありません。パーミッションをオーバーライドするための要件。より厳密なパーミッションを使用する
4スコープはクラスで発生するスコープは継承されたクラスで発生する

6.2.3スーパーキーワードの役割

superを使用して、サブクラスから親クラスのコンストラクター、共通メソッド、および属性を呼び出します。

6.4最終キーワード

Javaでのfinalの意味は最終的な意味であり、ファイナライザーとも呼ばれます。finalキーワードを使用して、クラス、属性、およびメソッドを宣言できます。宣言するときは、次の点に注意してください。
(1)finalを使用して宣言したクラスにサブクラスを含めることはできません。
(2)finalを使用して宣言したメソッドをサブクラスでオーバーライドすることはできません。
(3)finalを使用して宣言された変数は定数になり、定数は変更できません。

最終変数の命名規則。
finalを使用して変数を宣言する場合、すべての文字を大文字にする必要があります。例:INFO。これは開発で非常に重要です。

プログラム内の変数がpublicstatic finalを使用して宣言されている場合、この変数はグローバル定数と呼ばれます。

6.5抽象クラスの基本概念

クラス継承の予備的な説明は以前に与えられました。継承により、元のクラスから新しいクラスを派生させることができます。元のクラスは基本クラスまたは親クラスと呼ばれ、新しいクラスは派生クラスまたはサブクラスと呼ばれます。このメカニズムにより、派生した新しいクラスは元のクラスの機能を保持できるだけでなく、より多くの機能を持つことができます。
上記のメカニズムに対処することに加えて、Javaでは、親として使用するために特別にクラスを作成することもできます。このクラスは「抽象クラス」と呼ばれます。抽象クラスの役割は「テンプレート」に少し似ており、その目的は、設計者がその形式に従って新しいクラスを変更および作成できるようにすることです。ただし、抽象クラスから直接オブジェクトを作成することはできません。抽象クラスから派生できるのは新しいクラスのみであり、それによってオブジェクトを作成できます。ただし、抽象クラスの使用には単一継承の制限もあります。つまり、サブクラスは1つの抽象クラスしか継承できません。
抽象クラスの定義と使用規則は次のとおりです。
(1)抽象メソッドを含むクラスは抽象クラスである必要があります。
(2)抽象クラスと抽象メソッドの両方をabstractキーワードで宣言する必要があります。
(3)抽象メソッドのみ宣言する必要がありますが、必須ではありません。
(4)抽象クラスはサブクラスに継承され、サブクラス(抽象クラ​​スでない場合)は抽象クラスのすべての抽象メソッドをオーバーライドする必要があります。

フォーマット抽象クラスの定義フォーマット

上記の形式から、抽象クラスの定義には通常のクラスよりも抽象的なメソッドがいくつかあり、他の場所の構成は基本的に通常のクラスと同じであることがわかります。

abstract class 抽象类名称{
    
    
     属性;
     访问权限 返回值类型 方法名称(参数){
    
      //普通方法
           [return 返回值]}
     访问权限 abstract 返回值类型 方法名称(参数);//抽象方法
     //在抽象方法中是没有方法体的
}

上記の形式から、抽象クラスの定義には通常のクラスよりも抽象的なメソッドがいくつかあり、他の場所の構成は基本的に通常のクラスと同じであることがわかります。

抽象クラスと通常のクラスの最大の違いは必須です。
共通クラスが使用されている場合、サブクラスはそれ自体のニーズに応じて一部の親クラスメソッドを選択的にオーバーライドできるため、共通クラスはサブクラスのオーバーライドメソッドを制限できません。ただし、抽象クラスはサブクラスに親クラスのメソッドをオーバーライドさせることができるため、実際の開発では、サブクラスに通常のクラスを継承させることはお勧めしませんが、サブクラスに抽象クラスを継承させることのみをお勧めします。

抽象クラスは、finalキーワードを使用して宣言することはできません。

抽象メソッドにプライベート宣言を使用しないでください。
abstractキーワードを使用してabstractメソッドを変更する場合、abstractメソッドはサブクラスによって上書きされる必要があるため、private変更を使用できません。また、private宣言を使用すると、サブクラスを上書きできません。

抽象クラスは引き続きクラスの継承関係を使用し、抽象クラスにはさまざまな属性があるため、抽象クラスでは構築メソッドを使用できます。したがって、サブクラスは、化的をインスタンス化する前に、まず親クラスをインスタンス化する必要があります。

抽象クラスと通常クラス。
実際、抽象クラスは通常のクラスよりも1つ多くの抽象メソッドを定義し、オブジェクトを直接インスタンス化できないことを除いて違いはありません。

おすすめ

転載: blog.csdn.net/qq_43480434/article/details/113136533