インターフェースの定義と使用
抽象クラスとインターフェイスを柔軟に使用して設計できる場合、それは基本的にオブジェクト指向の概念を理解していることを意味します。このステップでは、多くのコードを蓄積する必要があります。
インターフェイスの基本的な定義
通常のクラスに対する抽象クラスの最大の利点は、サブクラスメソッドの上書きを制御できることです。一部の通常のメソッドは抽象クラスで予約されて
おり、これらの通常のメソッドにはセキュリティまたはプライバシー操作の問題が含まれる場合があります。すべての技術的な詳細を外部から隠すために、インターフェースを使用してそれを記述することができます。
インターフェイスは純粋な抽象クラスとして理解できます(最も原始的に定義されたインターフェイスには抽象メソッドとグローバル定数のみが含まれます)が、JDK1.8はLambda式の概念を導入し始め、インターフェイスの定義も強化されました。抽象メソッドとグローバル定数に加えて、通常のメソッドまたは静的メソッドを定義することもできます。
設計の観点からは、インターフェイスの構成は依然として抽象メソッドとグローバル定数に基づいている必要があります。
Javaでは、interfaceキーワードは主に定義に使用されます。
interface IMessage{
public static final String info = 'test'; //全局常量
public abstract String getInfo(); //抽象方法
}
クラス名はインターフェイス定義の要件と同じであるため、インターフェイス名を区別するために、インターフェイス名の前に大文字のI(インターフェイス)が追加されることがよくあります。
問題:現時点では、インターフェイスはインスタンス化されたオブジェクトを直接生成できないため、インターフェイスを使用するための原則は次のとおりです。
- インターフェイスはサブクラス(実装)によって実装する必要があり、1つのサブクラスで複数の親インターフェイスを実装できます。
- サブクラス(抽象クラスでない場合)は、インターフェイス内のすべての抽象メソッドをオーバーライドする必要があります。
- インターフェイスオブジェクトは、サブクラスオブジェクトの上方変換を使用してインスタンス化できます。
interface IMessage{
public static final String info = 'test'; //全局常量
public abstract String getInfo(); //抽象方法
}
class MessageImpl implements Imessage{ //实现接口
public String getInfo(){
return "test";
}
}
上記はインターフェイスの使用ですが、Javaでインターフェイスを使用する主な目的は、1つのサブクラスが複数のインターフェイスを実装できることであり、多重継承の概念はインターフェイスを使用して実現できます。
interface IMessage{
public static final String info = 'test'; //全局常量
public abstract String getInfo(); //抽象方法
}
interface IChannel{
public abstract boolean connect();
}
class MessageImpl implements Imessage,IChannel{ //继承多个接口
public String getInfo(){
return "test";
}
public boolean connect(){
return true;
}
}
ただし、現時点では、オブジェクトの変換に関する実際の状況を考慮する必要があります。この時点で、サブクラスオブジェクトは任意の親インターフェイスの変換を実現できます。
Javaでは、インターフェースは親クラスから継承することを許可されていないため、インターフェースがObjectのサブクラスになることはなく、インターフェースはObjectを使用して受信できます。
オブジェクトクラスオブジェクトは、基本データ型、クラスオブジェクト、インターフェイスオブジェクト、配列など、すべてのデータ型を受け取ることができます。
インターフェイスはパブリック定義標準を記述しているため、インターフェイス内のすべての抽象メソッドのアクセス権はパブリックです。
つまり、インターフェイスは正常に定義できますが、書き込むかどうかは同じです(上書きする場合はパブリックを使用する必要があります)。、実際の開発では、インターフェイスは抽象クラスで実装でき、抽象クラスは複数のインターフェイスを実装でき、共通クラスは1つの抽象クラスのみを継承でき、複数の親インターフェイスを実装できますが、最初に継承してから実装する必要があります。
インターフェイスの抽象は省略できますが、抽象クラスでは省略できません。インターフェイスは親クラスを継承できませんが、インターフェイスは拡張機能を介して複数の親インターフェイスを継承できます。これは、インターフェイスの多重継承と呼ばれます。
実際の開発では、インターフェイスの使用には3つの形式があります。
- 標準設定を行います。
- 運用能力を示します。
- リモートメソッドビューを公開します。これは通常、RPC分散開発で使用されます。
強化されたインターフェース定義
インターフェースの初期の主な特徴は、すべて抽象メソッドとグローバル定数で構成されていることですが、プロジェクトが関与していない場合、深刻な問題が発生する可能性があります;
インターフェースの不適切な設計:インターフェースの設計が十分であることを保証できませんサブクラスの利便性を促進するために、最初は完璧です。多くの場合、サブクラスにインターフェイスを直接継承させず、途中に抽象クラスを追加します。ただし
、インターフェイス設計の欠陥を解決するために、JDK1.8から開始します。 、開発者はインターフェイスで共通のメソッドを定義でき、インターフェイスで共通のメソッドを定義できます。デフォルトのステートメントを追加する必要があります。この操作はレスキュー機能であることに注意してください。必要がない場合は、最初の操作ではありません。選択;
通常のメソッドを追加することに加えて、静的メソッドを追加することもでき、静的はインターフェイスを介して直接呼び出すことができます。
インターフェイス定義標準を使用する
インターフェースの場合、開発における最も重要なアプリケーションは標準の策定です。
interface IUSB{
//定义USB标准
public boolean check();
public void work();
}
ファクトリデザインパターン(ファクトリ)
インターフェイスの場合、サブクラス化する必要があり、クラスはオブジェクトの上方変換を通じてインターフェイスのインスタンス化されたオブジェクトを取得できますが、インスタンス化プロセスで設計上の問題がある可能性があります。
結合の問題:キーワードnew、JVM設計をたとえば、Java移植性を実現するための鍵は次のとおりです。JVMは仮想マシンを使用してJavaプログラムを実行します。すべてのプログラムは特定のオペレーティングシステムに関連していませんが、JVMによって照合されます。
したがって、優れた設計では結合を回避する必要があります。
プロキシデザインパターン(プロキシ)
エージェントデザインの主な機能は、ユーザーが空腹である、食べる方法を考える、などのコアビジネス機能の処理にのみ開発の注意を集中するのに役立ちます。
interface IEat{
public void get();
}
class EatReal implements IEat{
public void get(){
System.out.println("[真实主题]得到一份食物")
}
}
class EatProxy implements IEat{
//服务代理
private IEat eat; //为吃服务
public EatProxy(IEat eat){
//一定要有一个代理项
this.eat = eat;
}
public void get(){
this.prepare();
this.eat.get();
}
public void prepare(){
//准备过程
System.out.println("[代理主题]:购买食材");
System.out.println("[代理主题]:处理食材");
}
}
エージェンシーデザインパターンの主なデザイン機能には、2つのサブカテゴリがあります。1つは実際のビジネスオペレーションカテゴリで、もう1つはエージェンシービジネスオペレーションカテゴリです。エージェンシービジネスオペレーションがないと、実際のビジネスを実行できません。
抽象クラスとインターフェースの違い
実際の開発では、抽象クラスとインターフェイスの定義が非常に似ていることがわかります。JDK1.8はデフォルトのメソッドと静的メソッドも定義できるため、これはJDK1.8以降特に明白ですが、2つの定義はまだ明らかです。そして、違いを使用します。
番号 | 違い | 抽象クラス | インターフェース |
---|---|---|---|
1 | 定義 | 抽象抽象クラス名{} | インターフェイスインターフェイス名{} |
2 | 組成 | 構築、通常のメソッド、静的メソッド、グローバル定数、メンバー | 抽象メソッド、グローバル定数、通常のメソッド、静的メソッド |
3 | 権限 | さまざまな権限定義を使用できます | パブリックのみを使用 |
4 | サブクラスの使用 | サブクラスは、extendsキーワードを介してキーワードを継承できます | サブクラスは、implementsキーワードを使用して複数のインターフェイスを実装できます |
5 | 2つの関係 | 抽象クラスはいくつかのインターフェースを実装できます | インターフェイスは抽象クラスを継承できませんが、複数の親インターフェイスは許可されます |
6 | 使用する | 1.抽象クラスまたはインターフェースはサブクラスを定義する必要があります2.サブクラスは抽象クラスまたはインターフェース内のすべての抽象メソッドを上書きする必要があります3.抽象クラスまたはインターフェースオブジェクトのインスタンス化は、サブクラスの上方変換によって実現されます |
抽象クラスとインターフェースの両方を使用できる場合、インターフェースはサブクラスの単一継承の制限を回避できるため、インターフェースが優先されます。
さらに、通常の設計の観点から、プロジェクトの全体的な設計を最初に実行する必要があります。インターフェイスから;