JAVAプログラミング--抽象クラスとインタフェース(三)


インタフェース
搬送:
1、重要性:Java言語ではabstract classとinterfaceは抽象クラス定義をサポートする2つのメカニズムである.この2つのメカニズムの存在こそ、Javaにオブジェクト向けの強力な能力を与えている.
2、簡単、規範性:プロジェクトが膨大であれば、すべての業務を整理できるアーキテクチャがいくつかの主要なインタフェースを定義する必要があります.これらのインタフェースは、開発者にそれらの業務を実現する必要があるだけでなく、命名規範を制限する必要があります(一部の開発者が勝手に命名して他のプログラマーが理解できないことを防ぐ).
3、メンテナンス、拡張性:例えば、パネルプログラムを作成し、その中にパネルクラスがあり、主に絵画機能を担当し、このように定義しました.
しかし、近い将来、あなたは突然このクラスがあなたを満たすことができないことに気づいて、それからあなたはまたこのクラスを再設計して、更に悪いことにあなたはこのクラスを放棄するかもしれませんが、他の場所は彼を引用して、このように修正するのは面倒です.
最初にインタフェースを定義し、ペイント機能をインタフェースに配置し、クラスを定義するときにこのインタフェースを実現し、このインタフェースで実装されたクラスを参照すればいいのですが、後で交換するには別のクラスを参照するだけで、メンテナンス、拡張の利便性が得られます.
4、安全、厳密性:インタフェースはソフトウェアの松結合を実現する重要な手段であり、システムの対外的なすべてのサービスを述べ、具体的な実現の詳細にかかわらない.これにより、比較的安全で厳密になります(一般的なソフトウェアサービス業者が考えていることが多い).
インタフェースには定数と抽象メソッドしか含まれておらず、newオペレータを使用してインタフェースのインスタンスを作成することはできません!!构造方法もない!!!
UML図では、インタフェース名とメソッド名に斜体を使います!
破線と中空三角形がインタフェースを指します!
プロパティ:インタフェースで定義されているすべての方法はpublicです.クラスがインタフェースを実装する場合、このメソッドは共通の抽象インスタンスメソッドとして宣言する必要があります!!!すべての変数はpublic static finalでなければなりません!!
Show the error in the following code:
    interface A {
      void m1();
    }

    class B implements A {
      void m1() {
        System.out.println("m1");
      }
    }
publicがvoid m 1()の前に加わる!!
Comparableインタフェース
Javaは、2つの異なるオブジェクトを比較する方法を提供します.
public interface Comparable {
public int compareTo(E o);
}

すべてのComparableオブジェクトにcomparareToメソッドがあるため、オブジェクトがComparableインタフェースタイプのインスタンスである場合、JavaAPIのjava.util.Arrays.sort(Object[])メソッドではcompareToメソッドを使用して配列内のオブジェクトを比較してソートできます.
練習:
次のコードはコンパイルできますか?
 Integer n1 = new Integer(3);
    Object n2 = new Integer(4);
    System.out.println(n1.compareTo(n2));

答え:いいえ、N 1はIntegerオブジェクトで、その比較方法にはIntergerパラメータが必要ですが、N 2はObjectとして宣言されています.コンパイラでエラーが発生します.
次のコードに何か間違いがありますか?
public class Test {
      public static void main(String[] args) {
        Person[] persons = {new Person(3), new Person(4), new Person(1)};
        java.util.Arrays.sort(persons);
      }
    }

    class Person {
      private int id;

      Person(int id) {
        this.id = id;         
      }
    }

答え:PersonはComparableインタフェースを実現しておらず,person配列はsort法で比較できない.
Comparableインタフェースを実装するメリットは、次のとおりです.
このインタフェースを実装することで、クラスのオブジェクトをComparableタイプが必要なメソッドに直接渡すことができます.
Cloneableインタフェース
Cloneableインタフェースは、クローン可能なオブジェクトを提供します.
Cloneableインタフェースの定義は次のとおりです.
public interface Cloneable{
}

このインタフェースは空で、空のボディを持つインタフェースをタグインタフェースと呼びます.特定のプロパティがあることを示すために使用します.Cloneableインタフェースを実装するクラスはクローン可能とマークされ、オブジェクトはObjectクラスで定義されたclone()メソッドを使用してクローンできます.
例:
Calendar calendar= new GregorianClaendar(2013,2,1);
Calendar calendar2=(Calendar)calendar.clone();

System.out.println("calendar==calendar2is"+(calendar==calendar2));

System.out.println("calendar.equals(calendar2)is"+calendar.equals(calendar2));

出力:
calendar == calendar1 is true;
calendar .equals (calendar2) is true;

equalsは内容を見て引用を見ない!!!