JAVA -----継承とスーパーキーワードの詳細な説明

継承により、サブクラスに親クラスのプロパティとメソッドを持たせたり、プロパティとメソッドを再定義または追加したりすることができます。


継承に関する注意

  1. 親クラスのプライベート変数をサブクラスに継承することはできません
  2. サブクラスは親クラスのメソッドをオーバーライドし、アクセス権限は親クラスの権限より低くすることはできません。public> default> private。
  3. サブクラスは1つの親クラスからのみ継承できますが、複数の継承が存在する可能性があります

まず、Javaでのsuperキーワードとthisキーワードの違いについて説明します。

キーワード メンバー変数にアクセスする アクセスコンストラクタ アクセスメンバーメソッド
この this。メンバー変数-このクラスのメンバー変数へのアクセス this(...)-このクラスの構築メソッドへのアクセス this.memberメソッド-このクラスのメンバーメソッドへのアクセス
素晴らしい スーパーメンバー変数-親クラスのメンバー変数へのアクセス super(…)-親クラスの構築メソッドへのアクセス super。memberメソッド-親クラスのメンバーメソッドへのアクセス

Javaでの継承の構文は次のとおりです。publicclasssubclassextends
parent class {}

  • 最初にコードを見てください。
public class father {
    
    
	public int age=40;//年龄
	
	public father() {
    
    
		System.out.println("father中无参构造方法被调用");
	}
	
	public father(int age) {
    
    
		System.out.println("father中带参构造方法被调用");
	}
}

public class son extends father{
    
    
	public int age=20;
	
	public son() {
    
    
		System.out.println("son中无参构造方法被调用");
	}
	
	public son(int age) {
    
    
		System.out.println("son中带参构造方法被调用");
	}
	public void show() {
    
    
		int age=30;
		System.out.println(age);//30
		System.out.println(this.age);//20
		System.out.println(super.age);//40		
	}

}


public class Demo {
    
    
	public static void main(String[] args) {
    
    
		son s=new son();
		s.show();
		
		son s1=new son(32);
		s1.show();
	}

}

息子オブジェクトはmain関数で作成され、最終的な出力は次のとおりです。

father中无参构造方法被调用
son中无参构造方法被调用
30
20
40
father中无参构造方法被调用
son中带参构造方法被调用
30
20
40

サブクラスのパラメーター化された構造またはパラメーターなしの構造が呼び出されるかどうかに関係なく、親クラスのパラメーターなしの構造が呼び出されます。なぜですか。

これは

  • サブクラスのすべてのコンストラクターは、デフォルトで親クラスの引数のないコンストラクターにアクセスします
  • サブクラスは親クラスのデータを継承し、親クラスのデータも使用する可能性があるため、サブクラスを初期化する前に、親クラスのデータの初期化を完了する必要があります。
  • 各サブクラス構築メソッドの最初のステートメントは、デフォルトでは次のとおりです。super()

したがって、サブクラスが呼び出されるたびに、システムはデフォルトで最初にsuper()ステートメントを実行し、最初に親クラスのパラメーターなしの構築メソッドを呼び出します。


では、パラメーターを使用して親クラスのコンストラクターを呼び出すにはどうすればよいでしょうか。


public class son extends father{
    
    
	public int age=20;
	
	public son() {
    
    
		super(20);
		System.out.println("son中无参构造方法被调用");
	}
	
	public son(int age) {
    
    
		super(20);
		System.out.println("son中带参构造方法被调用");
	}
	public void show() {
    
    
		int age=30;
		System.out.println(age);//30
		System.out.println(this.age);//20
		System.out.println(super.age);//40		
	}

}

subclassコンストラクターにsuper(x)を追加するだけです(xはパラメーターです)


  • スーパーを使用してサブクラスメソッドの書き換えを実装する

コードを直接見てください

お父さん:


public class Phone {
    
    
	public void call(String name) {
    
    
		System.out.println("给"+name+"打电话");
	}

}

サブクラス:

public class newPhone extends Phone {
    
    
	@Override
	public void call(String name) {
    
    
		System.out.println("开启视频");
		super.call(name);
	}

}

主な機能:

public class test {
    
    
	public static void main(String[] args) {
    
    
		newPhone p=new newPhone();
		p.call("小李");
	}

}

superキーワードを使用して、親クラスのメソッドを直接呼び出してから、このクラスの特定のプロパティをサブクラスに書き込む
ことができます@ Overrideは、オーバーライドするメソッド宣言の正確さを確認するために使用できる注釈です。

おすすめ

転載: blog.csdn.net/weixin_45102820/article/details/113085718