Java基礎------知識点整理(七)-----インターフェース

2811 ワード

1.抽象的な方法が抽象的な方法である場合、これは別の形式で定義し、表現することができる。         ------------      インターフェース(キーワード :  インターフェース)は、定義するときにクラスを使わない
    例:  
interface   Demo{
    public   abstract   final   int  NUM=1;//    
    public   abstract   void   show(); //     
}
    インターフェースの修飾変数:public   abstract  final   ......
    インターフェースの修飾方法:public   abstract   ......
    以上の2つの形式は固定されています。abstractコンパイラを一つだけ書いても自動的に追加してくれますが、このフォーマットに従って完全に書いたほうがいいです。
2.類と類の間は継承関係である
   クラスとインターフェースの間は関係を実現するのです。
   インターフェースとインターフェースの間は継承関係です。
3.javaでは直接多継承をサポートできません。同じ関数を呼び出す不確実性があります。しかし、javaは複数のインターフェースを実現できます。これはインタフェースの中の方法が抽象的で、たとえ親A、Bの中に同じ関数名があっても、具体化されていないので、誰を使っても同じです。不確実性が発生しません。 フォーマットは以下の通りです
class    C    implements   A,B{   //  A B   ,A B     
    coding   .....
}
4.抽象類とインターフェースの異同点
同じ点:抽象的な方法があります。
違い点:
(1)抽象類は継承が必要であり、しかも単に継承するしかない
          インターフェースは実現される必要があります。
(2)抽象類では、抽象的な方法と非抽象的な方法が定義され、サブクラスが継承された後、直接に非抽象的な方法が使用されます。
          インターフェースは抽象的な方法しか定義できません。サブクラスで実現しなければなりません。
(3)抽象類の継承は is-a  関係は、そのシステムの基本的な共通性を定義する内容である。
          インターフェースの実現時     like-a  関係は、システムの追加機能を定義します。
5.抽象的なものはいつ使いますか?インターフェースはいつ使いますか?
(1)一つのクラスの方法は抽象を必要とするが、比較的大きな抽象主体として、いくつかの一般的な方法があり、この場合は抽象を用いる
(2)インターフェースは拡張機能として機能していますので、中の方法が少なく、全部抽象的な場合、インターフェースを使って、インターフェースを拡張機能に重視します。
   原則:抽象の中の方法はこの類の体系の中で最も根本的な属性で、インターフェースは更に1種の付加的な機能のようです。
6.
public  interface  A{
    public void abstract a();
}
public  interface  B{
    public void abstract  b();
}
public  class  C{
    public void  a(){  syso “aaaaa”;}
}
public  class D  extends  C  implements  A,B{
    public  void  b( syso("bbbbb"));
}
Cにはa方法がありますので、Cを継承する時はa方法があります。つまりA方法を実現する必要はありません。
また、特定のクラスと複数のインターフェースを組み合わせる場合、この具体的なクラスは前に置かなければなりません。後に続くのがインターフェースです。そうでなければ、コンパイルエラーが発生します。
7.インターフェースを使う二つの核心原因
(1)複数のベースタイプにアップグレードできるようにするため(及びこれによる柔軟性)
(2)抽象ベースクラスを使用するのと同じである:クライアントプログラマがこのクラスのオブジェクトを作成するのを防ぐ
8.インターフェースを組み合わせる時の名前の衝突
interface  I1{ void f(); }
interface  I2{ int  f(int i);}
interface  I3{ int  f();}
class  C  {  public  int  f()  {  return  1 ;}}
class  C2  implements  I1,I2{  //       ,           ,      
    public void f(){}
    public int f(int i){return  1;}
}
class C3  extends C  implements  I2{  //                 ,           
    public  int  f(int  i){  return  1;}
}
class C4  extends  C  implements  I3{   //     ,    ,       C ,     
    public  int  f(){  return  1;}
}
//  !   class C5 extends  C  implements  I1{}   //C  f() I1  f()      (    ,        ),        I1 f()
//! interface  I4  extends  I1, I3 {}  //  I1   I3             ,       ,             。
8.優先的な選択類はインターフェースではなく、インターフェースを乱用しないでください。ただのツールです。