抽象クラスとインタフェースとの間の差(牛オフネットワークコピー)

 

 クラスはabstract修飾子は抽象クラスで含まれ、抽象クラスのインスタンスオブジェクトを作成することができません。メソッドを含む抽象クラスは抽象クラスとして定義する必要があり、抽象クラスのクラスメソッドは抽象的である必要はありません。抽象クラスクラスは、特定の(コンクリート)サブクラスで定義された抽象メソッドを実装する必要があり、従って、抽象的または抽象的な静的コンストラクタメソッドではありません。子供はすべての抽象メソッドに抽象親クラスの実装を好きではない場合は、サブクラスも抽象型として定義する必要があります。 
界面(インターフェイス)インターフェイスのすべてのメソッドが抽象的である必要があり、抽象クラスの特別な場合であると言うことができます。この方法は、パブリック静的最終的にパブリック抽象型メンバ変数型インタフェースのデフォルトにインタフェースのデフォルト値を定義しました。 
構文次の二つの違いを比較します 
。1.抽象クラスは、コンストラクタを持つことができ、インタフェースはコンストラクタを持つことができません。 
2.抽象クラスは、通常のメンバ変数を持つことができ、インターフェースは通常のメンバ変数ではない 
抽象クラス3.非抽象常法を含んでいてもよい、すべてのインタフェース方法が抽象である非抽象通常の方法を持っていなければなりません。 
(ただし、デフォルトのタイプ4.アクセスタイプ抽象メソッドが抽象クラスは、保護、および、公共であってもよい 
食が与えられていない、またそれは必要があります)が、抽象メソッドは、パブリックインターフェイスタイプ、およびデフォルトはパブリック抽象型。 
抽象クラスは、静的メソッドを含んでいてもよい、静的メソッドは、インターフェース含有することができない 
抽象クラスとインタフェース6変数は静的メンバ変数、抽象クラスは任意とすることができる静的メンバ変数のアクセスタイプを含むことができるが、唯一のインタフェースで定義されていますpublic static finalタイプがあること、およびデフォルトのpublic static finalタイプであることができます。 
7.クラスは複数のインタフェースを実装することができますが、唯一の抽象クラスを継承することができます。 
以下は、そのアプリケーション上の2つの違いを言う: 
インタフェースは、より多くの、主契約の定義モジュール間の通信に使用されるシステムアーキテクチャ設計方法、で役割を果たしています。抽象クラスは、コードの再利用を実現することができる、コードの態様を実施する役割を果たし、 

例えば、テンプレートメソッドデザインパターンは、プロジェクトのすべてのサーブレットクラスは権限と同じ方法、記録アクセスログと例外処理を決定するために行われるべきであると仮定して、抽象クラスの代表的なアプリケーションである、あなたはそう、抽象基本クラスを定義することができます次のようにすべてのサーブレットは、唯一の彼らのビジネスロジックコードを完了、各サブクラスで抽象基底クラスが決定され、アクセスログの記録と例外処理コードを完了するために、サービス・メソッドの特権を抽象基底クラスを継承する擬似コード: 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com.lei;
 
import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public abstract class BaseServlet  extends HttpServlet {
 
  /**
  * serialVersionUID属性概述
 
  */
  private static final long serialVersionUID = 1L;
 
  public final void service(HttpServletRequest request,
  HttpServletResponse response)  throws IOException, ServletException {
  // 记录访问日志
  // 进行权限判断
  if ( true ) // if条件里写的是“具有权限”
  {
  try {
  doService(request, response);
  catch (IOException e) {
  // 记录异常信息
  }
  }
 
  }
 
  protected abstract void doService(HttpServletRequest request,
  HttpServletResponse response)  throws IOException, ServletException;
}
 
    
実装クラスは次のよう: 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.lei;
 
import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class MyServlet  extends BaseServlet{
 
  /**
  * serialVersionUID属性概述
 
  */
  private static final long serialVersionUID = 1L;
 
  @Override
  protected void doService(HttpServletRequest request,
  HttpServletResponse response)  throws IOException, ServletException {
  // TODO Auto-generated method stub
  
  }
 
}

ミドルクラスのメソッド親コードの不確実な部分、サブクラスの乾燥を残すには、テンプレートメソッドデザインパターンを使用します。 
注意:全体的なアイデアの解釈のこの質問は抽象クラスとインタフェースの基本的な概念で始まり、その後、両方の構文の詳細を比較し、最終的に2つのアプリケーション間の違いを言うことです。 
構文の詳細を比較し差が構成されている共通のメンバ変数と(抽象メソッドを含む)方法六の態様次いで静的変数とメソッド、継承と答えを比較するための一つのようなもの、第三の、クラスのコンストラクタを開始します誰が彼らの深い技術的な知識を示すための典型的な例では特に、最後の答えの角度を、継承されました。 

 

 

 

おすすめ

転載: www.cnblogs.com/jiexing/p/11627248.html