JAVA継承における子親クラスの構築方法

angryTom
リリース: 2019-11-29 17:06:20
転載
2692 人が閲覧しました

JAVA継承における子親クラスの構築方法

まず、コンストラクター自体には、暗黙的な引数のないコンストラクター (デフォルト) があります。

① コンストラクターが記述されていない場合、コードの最初の行クラス内には実際にはデフォルトの引数のない構成体があります (システムが暗黙的にそれを作成します)

public class Student {
        private String name;
//        public Student() {}      隐式地“写”在这里,你看不见
//  Strudent类中虽然没有写构造方法,但相当于有上面的无参构造
//   只不过是隐式的,你看不见
}
ログイン後にコピー

(推奨ビデオ: Java ビデオ チュートリアル )

②パラメーター付きのコンストラクター メソッドのみを記述します。これは、パラメーター付きのコンストラクター メソッドのみと同等です (暗黙的なパラメーターのない構造はシールドされ、無視され、無効とみなされます) )

public class Student {
        private String name;
        public Student(String name) {
            this.name=name;
        }
//  此时原来Strudent类中的隐式的无参构造方法被屏蔽了,无效了
//  类中只有带参构造
}
ログイン後にコピー

③パラメータなしのコンストラクタとパラメータ化されたコンストラクタの両方を使用したい場合は、パラメータなしのコンストラクタ メソッドとパラメータ化されたコンストラクタ メソッドを明示的に記述する必要があります

public class Student {
        private String name;
        public Student() {}
// 显式地将无参构造写出来        
        public Student(String name) {
            this.name=name;
        }
//  若想Strudent类中拥有无参构造方法,必须显式地写出来
}
ログイン後にコピー

継承をさらに結合するには、子クラスと親クラスを考慮する必要があります。 :

④サブクラスのコンストラクター メソッド (パラメーターなしかパラメーター化かに関係なく) では、メソッドのコードの最初の行には、実際には親クラスのパラメーターなしのコンストラクター メソッドが暗黙的に含まれています

つまり: super()

public class Stu extends Student {
    private String name;
    public Stu() {
    // super();
    // 在子类的无参构造中,super()是隐式的“写”在这里的
    }
    
    public Stu(String name) {
    // super();
    this.name=name;
    // 在子类的带参构造,上面的super()同样也是隐式的“写”在这里的
    }
}
ログイン後にコピー

これが、サブクラスのコンストラクターを呼び出すときに、親クラスのパラメーターなしのコンストラクターが最初に呼び出される理由です。 )が存在します。

⑤ 同様に、上記の②と同様に、この時点でパラメータ化された構成体を記述すると、super(xx) は暗黙の super() をブロックします。

public class Stu extends Student {
    private String name;
    
    public Stu(String name) {
    // super();  原来隐式写在这里的super()被屏蔽了,无效了
    super(name);
    
    // 在子类的带参构造, 由于的super(name)的存在,super()无效了
    //此时子类的带参构造中,只有super(name)
    }
}
ログイン後にコピー

これが、親クラスのときの理由です。パラメーターなしのコンストラクターがない (つまり、パラメーター化されたコンストラクターのみがある (ケース 2 に相当))、サブクラスのコンストラクター メソッドはコンパイルできません。これは、子クラスのコンストラクター (パラメーターの有無にかかわらず) が親クラスのパラメーターなしのコンストラクターを呼び出すためです。コンパイラーは子クラスの 2 つのコンストラクターに super() を挿入しようとしていますが、親クラスのデフォルトのコンストラクターが未定義であるため、コンパイラーはエラー メッセージを報告します。

この問題を解決するには、単に

1) パラメータなしのコンストラクタを親クラスに追加します - パラメータなしのコンストラクタを親クラスに明示的に追加します

2) カスタムのパラメータ化されたコンストラクタを削除します親クラスのコンストラクター - デフォルトのパラメーターなしコンストラクターを復元するのと同等

3) サブクラスのコンストラクターに Super(XXX) を追加 - ⑤ のオリジナルを介してデフォルトの super() をブロックする

この記事php 中国語 Web サイトの java チュートリアル 列から来ています。学習へようこそ!

以上がJAVA継承における子親クラスの構築方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート