記事ディレクトリ
Java言語の基本クラスの継承
Java言語の3つの主要な特性の1つ
継承された特性
継承により、既存の型に基づいて拡張または変換して、新しいデータ型を取得できます。
- 既存のデータ型は、スーパークラスまたはスーパークラスと呼ばれます。
- 取得された新しいデータ型は、サブクラスまたは派生クラスと呼ばれます。
- クラスの継承により、プログラムコードの再利用性とスケーラビリティが向上し、ソフトウェア開発サイクルが短縮されます。
継承された分類
- 単一継承---サブクラスは直接の親クラスを1つだけ持つことができます
- 多重継承-----
サブクラスは複数の直接の親クラスを持つことができます
相続
フォーマット:
父类{
父类的内容
}
子类 extends 父类{
子类的内容
}
例:
package NewBolg;
class inherit {
private String blogger = "董小宇";
public String getBlogger() {
return blogger;
}
public void setBlogger(String blogger) {
this.blogger = blogger;
}
public static void main(String[] agrs){
Subclass subclass = new Subclass();
System.out.println("平台:" + subclass.getBlog() + ",博主是:" + subclass.getBlogger());
}
}
class Subclass extends inherit{
private String Blog = "CSDN";
public String getBlog() {
return Blog;
}
public void setBlog(String blog) {
Blog = blog;
}
}
実行結果は次のとおりです。
平台:CSDN,博主是:董小宇
注:
- 親クラスで定義されたメンバー変数はサブクラスによって継承されますが、
private
権限に直接アクセスすることはできず、その他には直接アクセスできます。親クラスで定義されたメンバーメソッドもサブクラスによって継承されます。 - サブクラスをオーバーライド(オーバーライド)するメソッドは、親クラスから継承されたメソッドとまったく同じです(同じメソッド名、同じパラメーター、同じ戻り値の型)。
- アクセス制御パーミッションは親クラスのメソッドのアクセス制御パーミッションよりも高く、サブクラスのメソッドによってスローされる例外タイプは親クラスのそれよりも低くなっています。
書き換えルール:「3つの同一、1つの小さい、1つの大きい」ルール
- 「3つ同じ」:同じメソッド名、同じ仮パラメーターリスト、同じ戻り値の型。
- 「1つの小さい」とは、サブクラスメソッド宣言によってスローされる例外クラスが、親クラスメソッド宣言によってスローされる例外クラス以下であることを意味します。
- 「1つの大きな」とは、サブクラスメソッドのアクセス権が親クラスのメソッド以上であることを意味します。
- オーバーライドするメソッドとオーバーライドされるメソッドはどちらもクラスメソッドまたはインスタンスメソッドのいずれかであり、どちらもクラスメソッドまたはインスタンスメソッドになることはできません。
メソッドの書き換えとメソッドのオーバーロードの違い
- カバレッジはサブクラスと親クラス間の直接的な関係であり、オーバーロードは同じクラス内の複数のメソッド間の関係です。
- 上書きは通常、2つのメソッド間で行われ、オーバーロードは複数のオーバーロードメソッドに依存します。
- オーバーライドされたメソッドは同じメソッド名と仮パラメーターリストを持ちますが、オーバーロードされたメソッドは同じメソッド名しか持つことができず、同じ仮パラメーターテーブルを持つことはできません。
- 上書きする場合、メソッドはそれを呼び出すオブジェクトに従って区別され、オーバーロードは、仮パラメーターに基づいて呼び出されるメソッドを決定することです。
注:
super
Javaによって提供されるキーワードであり、直接の親オブジェクトのデフォルト参照です。- 変更されたメソッドに
this
表示できないのと同様に、メソッドにも表示できません。static
super
static
- サブクラスが親クラスと同じ名前の数学を定義する場合、サブクラス属性が親クラス属性をオーバーライドすることも起こります。サブクラスのメソッドがこのプロパティに直接アクセスすると、それらはオーバーライドプロパティにアクセスし、オーバーライドされたプロパティにはアクセスできません
super
。親クラスのオーバーライドされたプロパティにアクセスすることはできません。
例:
メソッドでaという名前の属性にアクセスしたが、指定された呼び出し元が表示されない場合、システムは次の順序でaを検索します。
- このメソッドにaという名前のローカル変数があるかどうかを確認します。
- 現在のクラスにaという名前の属性が含まれているかどうかを確認します。
- aの属性がaの直接の親クラスに含まれているかどうかを確認し、次にaの親クラスをトレースし、クラスを認識し
java.lang.Object
ます。最後にaという名前の属性が見つからない場合、システムはエラーを生成します。
親クラスのコンストラクターを呼び出す
サブクラスはスーパークラスコンストラクターを継承しませんが、サブクラスコンストラクターはスーパークラスコンストラクターの初期化コードを呼び出す必要がある場合があります。
サブクラスコンストラクターは、次のように親クラスコンストラクターを呼び出します。
- サブクラス構築メソッドの実行本体のコードの最初の行は
super
、親クラス構築メソッドへの明示的な呼び出しを使用します。システムはsuper
、呼び出しで渡された引数リストに従って、親クラスの対応する構築メソッドを呼び出します。 - サブクラス構築メソッドの実行メソッドのコードの最初の行は
this
、このクラスの構築メソッドへの明示的な呼び出しを使用しています。システムはthis
、呼び出しで渡された引数のリストに従って、このクラスの別の構築メソッドを呼び出します。このクラスの別のコンストラクターが実行されると、親クラスのコンストラクターが呼び出されます。 - サブクラスコンストラクターの実行本体に
super
呼び出しも呼び出しもありませんthis
。サブクラスコンストラクターが実行される前に、システムはパラメーターなしで親のコンストラクターを暗黙的に呼び出します。
注:
super
呼び出しはcallとthis
非常に似ていsuper
ます。違いは、その親クラスのコンストラクターが呼び出され、これが同じクラスに含まれるコンストラクターを呼び出すことです。したがって、スーパーを使用して親クラス構造を呼び出すことも、サブクラス構築実行の最初の行に表示される必要があるため、this
呼び出しとsuper
呼び出しが同時に表示されることはありません。
例:
public class AA {
public static void main(String[] args){
//输出A
//分析:AA为父类,则无影响
AA aa = new AA();
//输出A,B
//分析:BB为子类,调用无参BB,super无参父类,输出A,然后输出无参BB输出语句
BB bb = new BB();
//输出A,AA,BB
//分析:BB为子类,调用含参BB,super带参父类,带参父类中含有this(),先执行不带参父类,然后执行带参父类的输出语句,最后执行带参子类的输出语句
BB bb = new BB(1);
}
AA(){
System.out.println("A");
}
AA(int i){
this();
System.out.println("AA");
}
}
class BB extends AA{
BB(){
super();
System.out.println("B");
}
BB(int i){
super(i);
System.out.println("BB");
}
}
私もプログラミングの初心者で、どうしても理解ミスがあるのは避けられませんが、読んだ後にコメントを書いて頂ければ幸いです。