Javaオブジェクト指向の思考の本質-要約


序文

デザインルール:一般的なデザインルールは次のとおりです。

  1. すべての派生クラス(サブクラス)の共通の属性と動作をスーパークラスに抽出します---------------共通性を抽出します。
  2. すべての派生クラス(サブクラス)は同じ動作をして通常のメソッドとして設計され、すべての派生クラスは異なる動作をして抽象メソッドとして設計されています。
  3. いくつかの派生クラス(サブクラス)の一般的な動作をインターフェイスに抽出し、インターフェイスでシングルルート継承を拡張します----------------複数の継承を実現します。

3つのオブジェクト指向機能:カプセル化、継承、および多態性

1つ、パッケージ

1.抽象的な機能インターフェイスの実装の詳細をパッケージ化して非表示にする方法を指します。
2.このクラスのコードとデータにアクセスするには、厳密なインターフェイス制御(プロパティのプライベート化プライベート、動作のパブリック化パブリック)を渡す必要があります。
注:プロパティがプライベートであり、同じパッケージ内の他のクラス、ゲッター、セッターからアクセスする必要がある場合(戻り値、参加なし、戻り値なし、およびパラメーターを持つメソッド)

第二に、継承

1.子クラスは、親クラスのメンバーメソッドを継承します。同じ名前のメンバーメソッドが子クラスに表示される場合、それは上書きです。つまり、子クラスのメンバーメソッドが親クラスのメンバーメソッドをオーバーライドします。子クラスの親クラスのメンバーメソッドにアクセスするには、super( )
2 親クラスのコンストラクター呼び出しと初期化プロセスは子クラスの前にある必要があり
ます。3。継承は、既存のクラスから継承情報を取得し、親クラスの動作またはプロパティを継承することによって新しいクラスを作成するプロセスです。

三、多形

異なるタイプのオブジェクトは同じメッセージに応答します。つまり、同じメッセージを異なるオブジェクトに従って実行したり、さまざまな異なる動作を採用したりできます。(メッセージの送信は関数呼び出しです)
1。多態性を実現するテクノロジー:動的バインディングとは、実行中に参照される実際のタイプを判断し、実際のタイプに従って対応するメソッドを呼び出すことです。
2.役割:タイプ間の結合関係を排除します。
3.多態性が存在するために必要な3つの条件:継承、書き換え、および親クラスの参照は、サブクラスオブジェクト(アップキャスト)を指します。
4.ポリモーフィックメソッドを使用してメソッドを呼び出す場合は、親クラスにメソッドがあるかどうかを確認し、ない場合はコンパイルエラーがある場合は、サブクラスに同じ名前のメソッドを呼び出します。

注:静的メソッドは特殊なケースです。静的メソッドは継承のみが可能で、オーバーライドすることはできません。同じ名前と形式の静的メソッドがサブクラスで定義されている場合、親クラスのメソッドのみが非表示になります。誰の参照が使用され、誰のバージョンが呼び出されるかを確認するために呼び出します。
次のコード栗:

public class A {
    
    
	int age1=1;
	String name1="我是父类";
	void show1() {
    
    
		System.out.println("this is 父类");
	}
	static void method1(){
    
    
		System.out.println("我是父类静态方法");
	}
}
public class B extends A {
    
    
	int age2=2;
	String name2="我是子类";
	String newBianliang = "我是新增成员变量";
	void show1() {
    
    
		System.out.println("this is 子类,我重写了父类的show()方法");
	}
	void showB_1() {
    
    
		System.out.println("子类新增的方法");
	}
	static void method1(){
    
    
		System.out.println("我是子类静态方法");
	}
}
public class App {
    
    
	public static void main(String[] agrs) {
    
    
		//上转型对象
		A a = new B(); //父类引用指向子类
		//能操作继承或隐藏的成员变量,
		System.out.println(a.age1);
		System.out.println(a.name1);		
		a.show1();//能调用子类继承或重写的方法
		a.method1();
		
//		System.out.println(a.age2);
//		System.out.println(a.name2);
//		System.out.println(a.newBianliang);
		//编译错误,不能操作子类新增的成员变量
		
		//a.showB_1();//编译错误,不能调用子类新增方法
		
		/**
		 * 上转型对象特点总结:可以操作继承或隐藏成员变量,
		 * 调用子类继承或重写的方法.
		 * 不能操作子类的新增成员变量,不能调用子类新增的方法
		 */
		
		System.out.println("-----------------");
		B b = new B();
		System.out.println(b.age2);
		System.out.println(b.name2);
		a.method1();
	}
}

コード結果:
ここに写真の説明を挿入

5.サブクラス内のいくつかのメソッドを呼び出したいが、親クラスにメソッドがない場合は、タイプ変換を実行する必要があります。これは、親クラスの参照がサブクラスのオブジェクトを指している場合(上方モデリング)、メソッドが親クラス参照を使用して呼び出された場合、親クラスに存在しないメソッドが見つかりません。これには、強制的な型変換(ダウンキャスト)が必要です。
次のコード栗:

//多态的演示
public class Duotai {
    
    
	public static void main(String[] args) {
    
    
		Aoo o = new Boo(); //向上造型
		Boo o1 = (Boo)o; //o所指向的对象,就是Boo类型
		o1.b();
		Inter1 o2 = (Inter1)o; //o所指向的对象,实现了Inter1接口
		o2.a();
		
		//Coo o3 = (Coo)o; //ClassCastException类型转换异常
		
		Aoo dd = new Coo();
		Coo o4 = (Coo)dd;
		o4.a();
		
	}
}

interface Inter1{
    
    
	public void a();
}

class Aoo{
    
    
}

class Boo extends Aoo implements Inter1{
    
    
	public void a() {
    
    
		System.out.println("实现Inter的方法");
	}
	public void b() {
    
    
		System.out.println("引用所指向的对象,就是该类型");
	}
}

class Coo extends Aoo {
    
    
	public void a() {
    
    
		System.out.println("123");
	}
}

//输出结果显示如下:

//所指向的对象,就是该类型
//实现Inter的方法
//123

出力結果: ここに写真の説明を挿入

4.要約(特別)

1.同じクラスの共通の特徴を要約し、クラスを構築するプロセス。
---- 1.1。データの抽象化と動作の抽象化を含みます。データ抽象化はクラスのメンバー変数になり、動作抽象化はクラスのメンバー関数になります。
---- 1.2。抽象化は、メンバー変数とメンバー関数のみを考慮し、特定の実装の詳細は考慮しません。

5、抽象クラスとインターフェースの違い

1.抽象クラスはメンバーメソッドの実装の詳細を提供でき(抽象クラ​​スは抽象メソッドを持つことができません)、パブリック抽象メソッドのみがインターフェイスに存在できます。
2.抽象クラスのメンバー変数はさまざまなタイプにすることができ、インターフェースのメンバー変数はpublic staticfinalのみです。
3.抽象クラスは静的メソッドと静的ブロックを持つことができますが、インターフェースには含めることができません(ただし、JDK 1.8はオーバーライドできます)。
4.クラスは1つの抽象クラスのみを継承でき、クラスは複数のインターフェースを実装できます。


6、メモリ管理

  1. ヒープ:
    • 新しいオブジェクト(インスタンス変数を含む)を保存します。
    • ガベージ:オブジェクトへの参照はありません。
      ガベージコレクター(GC)は、メモリヒープからガベージを時々クリーンアップします。収集プロセスは表示されず、ガベージが見つかってもすぐには収集されません。System.gc()を呼び出すことにより、JVMがGCにガベージを収集するようにスケジュールするように提案できます。
    • メモリリーク:使用されなくなったメモリが時間内に回復されていません。
      推奨事項:使用されなくなったオブジェクトについては、時間内に参照をnullに設定してください。
    • インスタンス変数は、ライフサイクル中にヒープに格納されます。オブジェクトが作成されると、オブジェクトがリサイクルされるときにリサイクルされます。
  2. スタック:
    • 呼び出されるメソッドにローカル変数(メソッドパラメーターを含む)を格納します。
    • メソッドが呼び出されると、対応するスタックフレームがスタック内のメソッドに割り当てられ、メソッド内のローカル変数(メソッドパラメーターを含む)がスタックフレームに格納されます。メソッドが実行された後、スタックフレームがクリアされ、ローカル変数が一緒にクリアされます。
    • ローカル変数のライフサイクル:メソッドが呼び出されると、そのメソッドはスタックに格納され、メソッドは終了し、スタックフレームがクリアされます。
  3. メソッド領域:
    • ストアの.class(静的変数やメソッドを含む)バイトコードファイル。
    • メソッドは1つだけであり、特定の呼び出し元オブジェクトはこれによって区別されます。

総括する

オブジェクト指向の3つの特徴:

  • パッケージ:
    • クラス:オブジェクトのプロパティと動作をカプセル化します。
    • 方法:特定のビジネスロジック機能をカプセル化します。
    • アクセス制御修飾子:特定のアクセス許可をカプセル化します。
  • 継承:
    • 役割:コードの再利用。
    • スーパークラス:すべての派生クラスに共通の属性と動作。
      • インターフェイス:一部の派生クラスに共通の動作。
      • 派生クラス:派生クラスの固有の属性と動作。
    • 一時性、単一の継承、複数のインターフェイスの実現。
  • 多形性:
    • 重要性:
      1。行動の多形性:すべての抽象メソッドは多形性です
      。2。オブジェクトの多形性:すべてのオブジェクトは多形性です。
    • 上向きモデリング、強制型変換、判断のインスタンス。
    • 多形性の発現:
      • 書き直し:さまざまなオブジェクトに応じて多形性を表示します。
      • 過負荷:さまざまなパラメーターに応じたパフォーマンスの多型。

Javaオブジェクト指向の紹介は以上です。
読者が学習に混乱しないように、フォローアップでより多くの知識を書き続けてください!
書くのは簡単ではありません。3Qのようにしてください。エラーがあればコメントしてください。


すべての章のカタログはここにある:https://blog.csdn.net/qq_41254299/article/details/106638651
再印刷のためのソースを記入してください:https://blog.csdn.net/qq_41254299
この記事はからである[Superclover_のブログ]

おすすめ

転載: blog.csdn.net/qq_41254299/article/details/108033205