サブクラスを作成する場合でも、宣言されたメンバー変数の名前が親クラスから継承されたメンバー変数の名前と同じである場合は、宣言された型が異なる場合があります。の場合、サブクラスは継承されたメンバー変数を非表示にします。
継承されたメンバー変数を隠蔽するサブクラスの特徴は次のとおりです。
(1) サブクラスのオブジェクトやサブクラス自身が定義したメソッドは、親クラスと同名のメンバ変数を操作し、サブクラスが再宣言したメンバ変数を参照します。
(2) サブクラスオブジェクトは、親クラスから継承したメソッドを呼び出して、サブクラスによって隠蔽されたメンバー変数を操作できます。つまり、サブクラスによって継承されたメソッドによって操作されるメンバー変数は、サブクラスによって継承または隠蔽されたメンバー変数でなければなりません。
知らせ:
サブクラスから継承されたメソッドは、サブクラスの継承された非表示のメンバー変数に対してのみ操作できます。サブクラスによって新たに定義されたメソッドは、サブクラスによって継承され、サブクラスによって新たに宣言されたメンバ変数に対して操作できますが、サブクラスによって隠蔽されたメンバ変数に対しては操作できません。
サブクラスは、継承されたメソッドをオーバーライドすることで、継承されたメソッドを非表示にすることができます。サブクラスが親クラスからメソッドを継承できる場合、サブクラスはこのメソッドをオーバーライドする権利を持ちます。メソッドのオーバーライドとは、このメソッドの型が、親クラスのメソッドの型、または親クラスのメソッドの型のサブタイプ、およびメソッドの名前と一致していることを指します。パラメータの数、パラメータの型、および親クラスのメソッドはまったく同じです。このようにサブクラスによって定義されたメソッドは、サブクラスによってオーバーライドされたメソッドと呼ばれ、新しいメソッドではありません。
サブクラスは、メソッドの書き換えによって継承されたメソッドを非表示にし、親クラスの状態と動作を独自のものに変更できます。親クラスのメソッド f() が子クラスに継承できる場合、子クラスは f() をオーバーライドする権利を持ちます。子クラスが親クラスのメソッド f() をオーバーライドすると、継承されたメソッド f() は非表示になります。この場合、子クラスは f() をオーバーライドする権利を持ちます。クラス オブジェクトがメソッド f() を呼び出すときは、オーバーライドされたメソッド f() を呼び出す必要があります。サブクラスがオーバーライドせずに親クラスのメソッド f() を継承する場合、もちろんサブクラスによって作成されたオブジェクトは f() メソッドを呼び出すことができますが、メソッド f() によって生成される動作は次と同じです。親クラスのもの。
オーバーライドされたメソッドは、継承されたメンバー変数を操作し、継承されたメソッドを呼び出すだけでなく、サブクラスの新しく宣言されたメンバー変数を操作したり、新しく定義された他のメソッドを呼び出すこともできますが、サブクラスによって隠蔽されたメンバー変数やメソッドを操作することはできません。サブクラスで隠しメソッドまたはメンバー変数を使用する場合は、super キーワードを使用する必要があります。
知らせ:
親クラスのメソッドをオーバーライドする場合、メソッドのアクセス権を下げることはできませんが、アクセス制限修飾子の順序は、パブリック、プロテクト、フレンドリー、アクセス権の順に高くなります。プライベート。例: サブクラスは親クラスのメソッド f をオーバーライドします。親クラスのこのメソッドのアクセス許可は保護されたレベルになります。サブクラスがオーバーライドする場合、そのレベルを保護されたレベルより低くすることはできません。