Java復習の知識点整理(三)


一.継承
1.抽象的共通性
2.複数のクラスは子、抽象クラスは親(スーパークラス)
3.子クラスは、親クラスの非プライベートメンバーにアクセスできます.
4.extendsによる継承
5.継承は1つのみで、サブクラスには1つの親しかありません.ただし、親クラスには複数のサブクラスがあります.
6.コードの再利用性を高め、マルチステートの前提を提供する
二、super
1.クラスに組み込まれたメンバー変数.親オブジェクト自体への参照であり、クラスの内部でのみ使用できます.
2.主に子と親に適用されるメンバーの名前を変更し、子で親の同名メンバーにアクセスしたい場合
三、super()
1.子クラスで親クラスのコンストラクション関数を呼び出します.パラメータを使用できます.使用する場合は、サブクラス構築関数の最初の文でなければなりません.
四、方法書き換え(overwriteを上書き)
1.子メソッド署名は親と同じ(名前、パラメータリスト)
2.親のprivateメソッドを上書きできません
3.子クラスで親クラスのメソッドを使用する場合は、super打点呼び出しを使用します.
4.サブクラス書き換えメソッドの権限は、親メソッドと同等の権限よりも大きい
5.静的は静的のみ、非静的は非静的のみ
五、finalキーワード
1.クラス、メソッド、メンバーを修飾できます.
2.修飾されたクラスは継承されず、終態クラスである
3.修飾された方法は書き換えられない
4.修飾フィールドは付与値を変更できません
六、クラスのメンバー
1.メンバー変数
2.メンバー関数
3.構築コードブロック:構築関数より先に実行し、構築関数の最初の文として見ることができ、複数の構築コードブロックは上から下の順に実行する
4.コンストラクタ
5.静的コードブロック
6.内部クラス
七、内部類
1.内部クラスは外部クラスのfinal変数にしかアクセスできない
2.内部クラスは静的であってもよく、静的内部クラス呼び出しの場合は外部クラス打点呼び出しを用いるが、この場合newのインスタンスは内部クラスのインスタンスであり、外部クラスの構築関数を歩かず、継承と区別する
3.内部クラスで外部クラスの同名変数にアクセスするには、外部クラスを使用する.this.同名変数
八.抽象クラスabstract
1.インスタンス化できないクラスは継承されますが、継承者はすべての抽象的な方法を実現します.
2.抽象クラスには抽象メソッドと非抽象メソッドがあります.しかし、抽象メソッドは抽象クラスでしか定義できません.抽象メソッドはメソッド体がないメソッドであり,メソッド体はサブクラスで実現される.
九.finalの役割
1.finalは最終的な意味を表し、メンバー変数、メンバーメソッド、クラスを修飾することができる.
2.メンバー変数を修飾し、この変数が付与されてから変更できないことを示し、定数を表す
3.修飾メンバーメソッドは、このメソッドがクラスに書き換えられないことを示します.
4.クラスを修飾して、このような継承されないことを表して、終態クラス
十、練習1
継承は以下の機能を実現する
a.クラスの定義
Animal
| |
| |
| |---
|--
|----
b.JiaFeiCatは終態クラスであり継承できない.
c.Catではcatch Mouseメソッドを定義し、このメソッドを上書きできないようにします.
d.ZangAoは定数を定義し、Blood="English";
e.Animal,Dog,Catは抽象クラスである.
コードの表示:
public abstract class Animal {

	public String name;
	public String color;

	public abstract void run();
}

abstract class Dog extends Animal {
	public abstract void watchHome();
}

abstract class Cat extends Animal {
	public final void catchMouse() {
		System.out.println("   ~~~");
	}
}

final class JiaFeiCat extends Cat {
	public void run() {
		System.out.println("         ~~~");
	}
}

class ZangAo extends Dog {
	public final String blood = "English";

	public void watchHome() {
		System.out.println("     ~~~");
	}

	public void run() {
		System.out.println("        ~~~");
	}
}

十一、練習2
内部クラスの実装
a.外部クラスChinaMap{ratio}
b.内部クラスを定義し、NashQunDaoMap{ratio}
コードディスプレイ
public class Ts02 {

	public static void main(String[] args) {
		ChinaMap china = new ChinaMap();
		System.out.println(china.ratio);
		ChinaMap.NashMap nash = new ChinaMap().new NashMap();
		System.out.println(nash.ratio);
		nash.showChinaRatio();
	}
}

class ChinaMap {

	public String ratio = "        1:10000";

	class NashMap {
		public String ratio = "        1:100";

		public void showChinaRatio() {
			System.out.println(ChinaMap.this.ratio);
		}
	}
}

十二、具体的な類の中でなぜ抽象的な方法がないのか
抽象メソッドにはコード主体がなく,具体的なクラスはインスタンス化できると考えられ,インスタンス化した場合,そのインスタンスが抽象メソッドを呼び出す場合,メソッド体がないためだめである.
十三、内部クラスはどのように外部クラスのメソッドと外部クラスの親クラスのメソッドにアクセスしますか?
public class Ts03 {

	public static void main(String[] args) {
		new Benz().new Engine().fire();
	}
}

class Car {
	public String name = "Car";

	public void run() {
		System.out.println("Car run...");
	}
}

class Benz extends Car {
	public String name = "BenzCar";

	// public abstract void run();
	public void run() {
		System.out.println("BenzCar run...");
	}

	class Engine {
		public String name = "Engine";

		public void fire() {
			//               
			Benz.this.run();
			//               
			System.out.println(Benz.this.name + "  ");
			//                 
			Benz.super.run();
			//                 
			System.out.println(Benz.super.name + "  ");
		}
	}
}

十四、子類は親類の具体的な方法を抽象的な方法に上書きすることができますか?
はい、しかし、サブクラスは抽象クラスでなければなりません.
全文完了!