java継承のまとめ
1、コンストラクタ
1、親類にパラメータのない構造関数がある場合(パラメータのある構造関数もあります。)、サブ構造関数は呼び出しを表示する必要がなく、システムは自動的に親類の無パラメトリック構造関数を呼び出します。
親類
親の無パラメータ構造関数
サブクラスの引数なしのコンストラクタ2、親がパラメータのあるコンストラクタしかない場合、サブクラスのコンストラクタは呼び出しを表示しないとコンパイルエラーが発生します。
親類
私はサブクラスの0 1です
サブクラスのgetNumber方法を注釈してください。
私は父です
次は特殊な状況を見ます。
親クラスの静的コードブロック親タイプの非静的コードブロック親タイプの構造関数クラスは、Fatherの変数カバー17である。 //ここでは、親タイプではない非静的コードブロックの親タイプの構造関数クラスは、Testの変数カバー0のまとめです。属性の値は親タイプですか?それともサブクラスですか?私たちが作成したオブジェクトのタイプに依存せず、私たちが定義した変数のタイプに依存します。メソッド取得変数(親のメンバー変数をサブクラスでカバーする場合、親のメソッドは親のメンバー変数、サブメソッドはサブクラスのメンバー変数)を使用します。
以下はブログを転載します。詳しく分析してください。
1、親類にパラメータのない構造関数がある場合(パラメータのある構造関数もあります。)、サブ構造関数は呼び出しを表示する必要がなく、システムは自動的に親類の無パラメトリック構造関数を呼び出します。
親類
public class Father {
public Father(){
System.out.println(" ");
}
public Father(String str) {
System.out.println(" 1");
}
public Father(int number) {
System.out.println(" 2");
}
}
サブクラス<span style="font-size:14px;">public class Child extends Father {
public Child() {
// super();
System.out.println(" ");
}
}
</span>
実行<span style="font-size:14px;">public class Test extends Father {
public static void main(String[] args) {
new Child();
}
}</span><span style="font-size:18px;">
</span>
結果:親の無パラメータ構造関数
サブクラスの引数なしのコンストラクタ2、親がパラメータのあるコンストラクタしかない場合、サブクラスのコンストラクタは呼び出しを表示しないとコンパイルエラーが発生します。
親類
public class Father {
public Father(String str) {
System.out.println(" ");
}
public Father(int number) {
System.out.println(" ");
}
}
サブクラスpublic class Child extends Father {
public Child() {
super(5);// , ,
System.out.println(" ");
} }
2、方法カバー1、 , ;
2、 ;
3、 ,
4、 private, ,
3、メンバーカバーpublic class Father {
public int number;
public Father(){
System.out.println(" ");
}
public Father(String str) {
this.number=0;
System.out.println(" ");
}
public Father(int number) {
this.number=number;
System.out.println(" ");
}
public int getNumber() {
number++;
System.out.println(" ");
return number;
}
{
System.out.println(" ");
}
static {
System.out.println(" ");
}
public void FPrint() {
System.out.println(" F");
}
public void Print() {
System.out.println(" P");
}
}
サブクラスpublic class Child extends Father {
public Child() {
super(); //
// super(5);// ,
System.out.println(" ");
}
{
System.out.println(" ");
}
static {
System.out.println(" ");
}
public void CPrint(){
super.FPrint();
System.out.println(" ");
}
public void Print(){
System.out.println(" ");
}
}
testpublic class Test extends Father {
public int number;
public Test(int number) {
super(number);
}
public int getNumber() {
System.out.println(" "+number);
number++;
return number;
}
public static void main(String[] args) {
// new Child();
// new Out.inner().innerprint();
Father f=new Test(17);
System.out.println(f.getNumber());
}
}
運転結果:私はサブクラスの0 1です
サブクラスのgetNumber方法を注釈してください。
public class Test extends Father {
public int number;
public Test(int number) {
super(number);
}
// public int getNumber() {
//
// System.out.println(" "+number);
// number++;
//
// return number;
// }
public static void main(String[] args) {
Father f=new Test(17);
System.out.println(f.getNumber());
}
}
運転結果:私は父です
次は特殊な状況を見ます。
public class Test extends Father {
public int number;
public Test(int number) {
super(number);
}
public int getNumber() {
System.out.println(" "+number);
number++;
return number;
}
public static void main(String[] args) {
Father f=new Test(17);
System.out.println(" Father "+f.number);
Test t=new Test(17);
System.out.println(" Test "+t.number);
}
}
運転結果は、親クラスの静的コードブロック親タイプの非静的コードブロック親タイプの構造関数クラスは、Fatherの変数カバー17である。 //ここでは、親タイプではない非静的コードブロックの親タイプの構造関数クラスは、Testの変数カバー0のまとめです。属性の値は親タイプですか?それともサブクラスですか?私たちが作成したオブジェクトのタイプに依存せず、私たちが定義した変数のタイプに依存します。メソッド取得変数(親のメンバー変数をサブクラスでカバーする場合、親のメソッドは親のメンバー変数、サブメソッドはサブクラスのメンバー変数)を使用します。
以下はブログを転載します。詳しく分析してください。