javaインターフェースと抽象クラスの違いと使用法について話す


序文

継承は、オブジェクト指向プログラミング(OOP)の重要なプロパティです。これは、あるクラスが別のクラスの特性(フィールドとメソッド)を継承できるようにするJavaのメカニズムです。Javaでの継承に使用される、「extends」と「implements」の2つの主要なキーワードがあります。


ヒント:以下はこの記事の内容です。以下のケースは参照用です

1つは、インターフェイスと抽象クラスの定義です。

インターフェイス(実装)

Javaでは、implementsキーワードを使用してインターフェイスを実装します。インターフェイスは、完全な抽象化を実装し、抽象メソッドのみを含む特殊なタイプのクラスです。インターフェイスメソッドにアクセスするには、インターフェイスをimplementsキーワードを使用して別のクラスで「実装」する必要があり、メソッドはインターフェイスプロパティを継承するクラスに実装する必要があります。インターフェイスにはメソッドが実装されていないため、クラスは一度に任意の数のインターフェイスを実装できます。
例:

// Defining an interface 
interface One {
    
     
    public void methodOne(); 
} 
  
// Defining the second interface 
interface Two {
    
     
    public void methodTwo(); 
} 
  
// Implementing the two interfaces 
class Three implements One, Two {
    
     
    public void methodOne() 
    {
    
     
  
        // Implementation of the method 
    } 
  
    public void methodTwo() 
    {
    
     
  
        // Implementation of the method 
    } 
} 

複数の実装例:


brightness_4
// Defining the interface One 
interface One { 
    void methodOne(); 
} 
  
// Defining the interface Two 
interface Two { 
    void methodTwo(); 
} 
  
// Interface extending both the 
// defined interfaces 
interface Three extends One, Two { 
} 

要約(拡張)

Javaでは、extendsキーワードは、定義されているクラスが継承を使用して基本クラスから派生していることを示すために使用されます。したがって、基本的に、extendsキーワードは、親クラスの機能を子クラスに拡張するために使用されます。Javaでは、複数の継承は許可されていません。したがって、あいまいさを避けるために、クラスは1つのクラスしか拡張できません。
例:


class One {
    
     
    public void methodOne() 
    {
    
     
  
        // Some Functionality 
    } 
} 
  
class Two extends One {
    
     
  
    public static void main(String args[]) 
    {
    
     
        Two t = new Two(); 
  
        // Calls the method one 
        // of the above class 
        t.methodOne(); 
    } 
} 

例:pandasは、データ分析タスクを解決するために作成されたNumPyに基づくツールです。

2.コントラストインターフェイスと抽象化

シリアル番号\クラス インターフェイス(実装) 要約(拡張)
1 「implements」キーワードを使用することにより、クラスはインターフェースを実装できます 「extends」キーワードを使用することにより、クラスは別のクラスを継承でき、インターフェイスは他のインターフェイスを継承できます
2 インターフェイスを実装するクラスは、インターフェイスのすべてのメソッドを実装する必要があります スーパークラスのサブクラスを拡張しても、必ずしもスーパークラスのすべてのメソッドが対象になるとは限りません。
3 クラスは一度に任意の数のインターフェースを実装できます クラスは1つのスーパークラスのみを拡張できます
3 インターフェイスは他のインターフェイスを実装することはできません インターフェイスを介して任意の数のインターフェイスを拡張できます

3つの使用シナリオ

4、拡張

Java 8以降、インターフェイスはメソッドによって実装することもできます

Java 8以降、インターフェイスにデフォルトのメソッドのサポートが追加されました。Java 9以降では、プライベートのデフォルトメソッドを定義することもできます。デフォルトの方法は、既存のインターフェースを拡張するためのバイナリ互換の方法を提供します。たとえば、コレクションシステムのルートインターフェイスであるjava.util.Collectionに精通しています。主に、LambdaおよびStream関連の関数を増やすために、一連のデフォルトメソッドがJava8に追加されました。コラムで前述したコレクションのようなツールクラスの場合、多くのメソッドが基本インターフェイスのデフォルトメソッドとして実装するのに適しています。

public interface Collection<E> extends Iterable<E> {
     /**
     * Returns a sequential Stream with this collection as its source 
     * ...
     **/
     default Stream<E> stream() {
         return StreamSupport.stream(spliterator(), false);
     }
  }


総括する

1オブジェクト指向の3つの特性であるカプセル化、継承、および多態性を深く理解する必要があります。
2日常の開発では、最も基本的な設計原則を理解する必要があり、SOLID設計モードの6つの原則を習得する必要があります(関連するコンテンツは後でブログに追加します)。
単一の責任(単一の責任)、クラスまたはオブジェクトは単一の責任のみを持つのが最善です。特定のクラスがプログラム設計で複数の義務を負うことが判明した場合は、それを分割することを検討してください。

スイッチの原則(開閉、拡張の場合は開く、変更の場合は閉じる)、設計は拡張に対して開いており、変更に対して閉じている必要があります。言い換えれば、プログラム設計はスムーズなスケーラビリティを確保し、回帰の問題を減らすために、同様の関数の追加による既存の実装の変更を回避するように努める必要があります。

Liskov Substitution(Liskov Substitution)は、オブジェクト指向の基本要素の1つであり、継承関係を抽象化する場合、親クラスまたは基本クラスを使用できる場所であればどこでも、サブクラスに置き換えることができます。

インターフェイスの分離:クラスとインターフェイスを設計するときに、インターフェイスで定義されているメソッドが多すぎると、そのサブクラスがジレンマに直面する可能性があります。つまり、一部のメソッドだけが意味を持ち、破壊されます。プログラムの結束。
この場合、単一の機能で複数のインターフェイスに分割することで、動作を切り離すことができます。将来のメンテナンスでは、インターフェイスの設計が変更されても、他のインターフェイスを使用するサブクラスには影響しません。

依存関係の反転、エンティティは実装ではなく抽象化に依存する必要があります。言い換えると、高レベルのモジュールは低レベルのモジュールに依存するべきではなく、抽象化に基づくべきです。この原則を実践することは、製品コード間の適切な結合を確実にするための魔法の武器です。

おすすめ

転載: blog.csdn.net/aa327056812/article/details/109600518