オブジェクト指向の3つの基本的な特徴と5つの基本原則
いずれも基本的な質問ですが、面接で誰もが答えられる基本的な特徴や基本原則は何ですか?秘密の道を覚えた後は、忘れてはいけないのですが、細部がどのように使われ、反映されているのでしょうか。流暢になるためにそれを言っていくつかの例を引用するのは少し難しいかもしれません(私はこのようです)ので、要約しましょう。
3つの基本的な特徴
1.パッケージ
- 定義:オブジェクトのプロパティと操作(またはサービス)を独立した全体に結合します。つまり、プロパティをプライベート化し、必要に応じてアクセスするためのセッターメソッドとゲッターメソッドを提供し、オブジェクトの内部実装の詳細を可能な限り非表示にします。
- 機能:ユーザーは特定の実装の詳細を気にする必要はありませんが、外部インターフェイスを介してのみクラスのメンバーにアクセスできます。私たちが一般的に使用するUSBインターフェースは周辺機器を必要とし、デバイスをUSBインターフェースに接続するだけで済みます。内部の仕組みはユーザーにとって重要ではありません。USBインターフェースは外部アクセスインターフェースです。
- 目的:データセキュリティを強化し、他のユーザーが自由にデータにアクセスして変更することを防ぎ、プログラミングを簡素化します。
2.継承
- 定義:継承とは、サブクラスが親クラスの特性と動作を継承するため、サブクラスオブジェクト(インスタンス)が親クラスのインスタンスドメインとメソッドを持つか、サブクラスが親クラスからメソッドを継承するため、サブクラスが親クラスと同じ動作をします。
- 特徴:
- 単一の継承のみがサポートされます。つまり、サブクラスは1つの親クラスのみを持つことができますが、マルチレベルの継承を実現でき、サブクラスには一意の親クラスがあり、親クラスも再度継承できます。
- サブクラスは、親クラスのプロパティとメソッドを持つことができます。
- サブクラスは、独自のプロパティとメソッドを持つことができます。
- サブクラスは、スーパークラスのメソッドをオーバーライドできます。
- 目的:コードの再利用を実現します。
- 使用する:
-
メンバー変数であろうとメンバーメソッドであろうと、最初に現在のクラスで検索されます。そうでない場合は、親クラスで上向きに検索され、サブクラスで下向きに検索されることはありません。
-
ローカルメンバー変数:直接使用;このクラスメンバー変数:this。メンバー変数;親クラスメンバー変数:スーパー。親クラスメンバー変数
-
これとスーパーキーワードの使用法
super()关键字的用法: - 子类的成员方法中,访问父类的成员变量。 - 子类的成员方法中,访问父类的成员方法。 - 子类的构造方法中,访问父类的构造方法。 this关键字用法: - 本类成员方法中,访问本类的成员变量。 - 本类成员方法中,访问本类的另一个成员方法。 - 本类的构造方法中,访问本类的另一个构造方法。
-
コンストラクター
継承関係では、親クラスと子クラスの構築メソッドのアクセス特性:- サブクラス構築メソッドにはデフォルトの暗黙的なsuper();呼び出しがあるため、最初に親クラス構築メソッドを呼び出してから、サブクラス構築メソッドを呼び出す必要があります。
- サブクラスの構築はsuper();である可能性があります。スーパークラスのオーバーロード構築を呼び出します。(重負荷)
- super();親クラスは構築メソッドを呼び出します。これはサブクラス構築の最初の行である必要があります。これは;で終わる最初の要素であり、一度だけ呼び出すことができます。
-
3.ポリモーフィズム
- 定義:同じエンティティには、同時に複数のフォームがあります。症状は次のとおりです。基本クラス参照はサブクラスオブジェクトを指します。例:変換オブジェクトで、インターフェースコールバック。
- 特徴:
1。タイプ間の結合関係を排除して、低結合を実現します。
2.柔軟性。
3.スケーラビリティ。
4.交換可能性。 - 目的:コードの柔軟性を高めること。
- 使用する:
- アップ
キャストオブジェクト子宣言オブジェクトの参照は、親クラスによって宣言されたオブジェクトに割り当てられ、親クラスオブジェクトは子クラスオブジェクトのアップキャストオブジェクトになります。具体的な例は次のとおりです。
// 父类名称 对象名 = new 子类名称(); class Animal { void eat() { System.out.println("动物吃饭!"); } } class Dog implements Animal { public void eat(){ System.out.println("小狗吃饭!"); } } 主类:{ Animal animal = new Dog(); animal.eat(); }
- インターフェイスコールバックインターフェイス
を実装するクラスによって作成されたオブジェクトの参照は、インターフェイスによって宣言されたインターフェイス変数に割り当てられます。インターフェイス変数は、インターフェイスによって宣言された抽象メソッド(実装クラスによってオーバーライドされた)、つまりインターフェイスコールバックを呼び出します。具体的な例は次のとおりです。
// 接口名称 接口变量 = new 实现类名称(); interface Animal { void eat(); } class Dog implements Animal { public void eat(){ System.out.println("小狗吃饭!"); } } 主类:{ Animal animal = new Dog(); animal.eat(); }
- アップ
5つの基本的な特徴
- 単一責任の原則
クラスに関する限り、その変更の理由は1つだけであり、責任は1つだけである必要があります。クラスに複数の責任がある場合、これらの責任は結合され、1つの責任が変更されると、他の責任が影響を受ける可能性があります。 - 開放性と閉鎖性の原則
イメージ(クラス、モジュール、関数など)は、拡張のために開いている必要がありますが、変更のために閉じている必要があります。これは、エンティティがソースコードを変更せずに動作を変更できることを意味します。 - リヒター置換原則
基本クラスが出現する可能性がある場合は常に、サブクラスが出現する必要があります。リヒター置換原則は、「オープンクローズ」原則を補足するものであり、「オープンクローズ」原則を実現するための重要なステップは抽象化です。基本クラスとサブクラスの間の継承関係は抽象化の具体的な実現であるため、リヒター置換原則は抽象化を実現するための具体的なステップの仕様です。 - 逆転の原則に依存する
プログラムは、特定の実装ではなく、抽象インターフェースに依存する必要があります。簡単に言えば、実装ではなく抽象化をプログラムする必要があります。これにより、クライアントと実装モジュール間の結合が減少します。 - インターフェイス分離の原則
クライアントは、必要のないインターフェイスに依存しないでください。あるクラスの別のクラスへの依存は、最小のインターフェースに基づく必要があります。インターフェースで使用されていないメソッドがある場合は、イオンインターフェースを抽出できます。単一のインターフェースを使用するよりも、複数の特殊なインターフェースを使用することをお勧めします。
自分の学習ノートを初めて記録します。問題を見つけた場合は、ポインタを教えてください。