Interface vs Abstract class
3870 ワード
1. Abstract classes in java
最も簡単に言えば、abstractclassはabstractキーワードを使用して宣言されたclassである.クラスはabstractメソッドを有するか持たないかのいずれかである.JVMは抽象クラスを動作が完全に定義されていない不完全なクラスと見なす.classをabstractとして定義するには、1つだけ強制します.classのインスタンスを生成できません.
1) Syntax of abstract class
abstract class TestAbstractClass
{
public abstract void abstractMethod();
public void normalMethod()
{
//method body
}
}
TestAbstractClassには2つの方法があります.抽象的な方法と一般的な方法.abstractメソッドを含むclassはabstractclassと宣言する必要があります.2) Abstract method
abstract法はそこでは実現されていない方法である.アプリケーションで抽象メソッドを使用する唯一の方法は、クラスを拡張することです.サブクラスはスーパークラスの動作を継承することができ、スーパークラスはサブクラスへの参照を持つことができ、抽象クラスの重要性を高めます.
2. Interfaces in java
Javaには、どのクラスでもすべてのインタフェースを実装できるというルールがあるので、インタフェース内で定義されているすべての方法は共通でなければなりません.
1) Syntax of interface
public interface TestInterface
{
void implementMe();
}
上記のインタフェースを実装するすべてのクラスは、impleMentMe()メソッドを上書きする必要があります.2) Abstract class implementing interface
インタフェースの実装時に内部メソッドを上書きしない場合は、実装されたクラスをabstractとして定義する場合のみです.
public abstract class TestMain implements TestInterface
{
//No need to override implement Me
}
その他の場合は、implementMe()メソッドを無条件に上書きする必要があります.public class TestMain implements TestInterface
{
@Override
public void implementMe() {
// TODO Auto-generated method stub
}
}
3. Abstract classes vs Interfaces
4.いつ使用するか
1) Partial behavior with abstract classes
抽象クラスでは、いくつかの動作を定義できます.HttpServiceletの例を表示します.サーブレットテクノロジーを使用したWebアプリケーションを開発する場合、このクラスは常に継承する必要があります.各servletには、初期化、サービス、破棄のライフサイクルフェーズがあります.servletを作成するたびに、各ステップに新しいコードを記述する必要がある場合は、大きな無駄になります.
JDKデザイナーはこの問題を解決するためにHttpServicelet抽象クラスを作成した.ここでは,各段階について基本コードを記述した.ここでは、必要な方法をカバーすれば、使いやすくなります.
2) Contract only interfaces
インタフェースはclassのフィーチャーのみを定義し、インタフェースを強制的に実装するclassがすべてのフィーチャーを1つずつ実装する場合に使用できます.
Collection FrameworkのMapインタフェースを考えてみましょう.ここではmapがどのように働くべきかのルールのみを定義します.たとえば、key-valueペアを保存するか、valueがkeyでアクセスする必要があります.これらの規則はインタフェース内で抽象的な方法で定義される.
これらの機能を実装するクラス(HashMap、HashTable、TreeMapなど)は、インタフェース内の方法を異なるように実装し、他の異なる特徴を有する.
さらに、インタフェースは、責任分離を定義するために使用することができる.たとえば、HashMapは、Map、Serializable、Cloneableの3つのインタフェースを実装します.各インタフェースは、分離の責任を定義するので、classが必要なインタフェースを選択して実装できます.
3)例
第一の親である生物は生物を定義する抽象類である.それらを継承するAnimal,Plant abstractclassは,それぞれ動物,植物の特性をabstract法と定義している.
インタフェースの使用目的は,Eatableインタフェースを用いることにより,Animal,Plantがそれぞれ異なる親のMonkey,Kimなどのclassを継承する共通の機能である食事機能を実現していることがわかる.つまり,継承関係が異なっていても,同じ機能を強制的に実行することができる.
上のTalkableインタフェースは、同じ親AnimalのKim,Gilを継承して使用する機能です.したがって,下図のようにHuman Abstract classを生成し,Kim,Gilに継承させることで,汎用機能(Talkable)を強制的に実現できる.
リファレンス
Reference
この問題について(Interface vs Abstract class), 我々は、より多くの情報をここで見つけました https://velog.io/@bernard717/Interface-vs-Abstract-classテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol