JAva抽象クラスとインタフェースの詳細(初心者向け)

4189 ワード

JAva抽象クラスとインタフェースの詳細(初心者向け)
目次:
一、抽象類
1.概念
2.注意
3.文法
4.例
二、インタフェース
1.概念
2.インタフェースとクラスの類似点
3.インタフェースとクラスの違い
4.インタフェースの特性
三、抽象クラスとインタフェースの違い
一、抽象類
1.概念
オブジェクト向けの概念では、すべてのオブジェクトがクラスによって描かれていますが、逆に、すべてのクラスがオブジェクトを描くために使われているわけではありません.1つのクラスに特定のオブジェクトを描くのに十分な情報が含まれていない場合、このようなクラスは抽象クラスです.
2.注意:
  • 抽象クラスはオブジェクトをインスタンス化できないほか、クラスの他の機能は依然として存在し、メンバー変数、メンバーメソッド、構築メソッドのアクセス方法は通常のクラスと同じである.
  • 抽象クラスはオブジェクトをインスタンス化できないため、抽象クラスは継承されなければ使用できません.そのため、抽象クラスを設計するかどうかを設計段階で決定することが多い.
  • 親クラスには、子クラスの集合の一般的なメソッドが含まれていますが、親クラス自体が抽象的であるため、これらのメソッドは使用できません.
  • Javaで抽象クラスは継承関係を表し、1つのクラスは1つの抽象クラスしか継承できないが、1つのクラスは複数のインタフェースを実現することができる.
  • Java言語でabstract classを使用して抽象クラスを定義します.

  • 抽象クラスオブジェクトは、親参照が子クラスオブジェクト、匿名内部クラスを指す2つの方法で得ることができる.
    クラスが継承する抽象親クラスに親抽象親クラスがある場合は、子クラスですべての抽象親のすべての抽象メソッドを書き換える必要があります.
    抽象クラスは、非抽象クラスを継承し、親クラスのすべての非プライベート属性とメソッドを継承することもできます.
    構築メソッド、クラスメソッド(staticで修飾されたメソッド)は抽象メソッドとして宣言できません.
    3.文法
    1)抽象クラス構文:
    publicabstractclassDemo {
     
    }
    2)抽象メソッド構文:
    publicabstractvoidabc();
    抽象メソッドに関するコメント:
  • このようなクラスを設計したい場合、このクラスには特別なメンバーメソッドが含まれています.このメソッドの具体的な実装は、そのサブクラスによって決定されます.親クラスで抽象メソッドとして宣言できます.
  • Abstractキーワードは同様に抽象メソッドを宣言するために使用することができ、抽象メソッドはメソッド名を1つだけ含み、メソッドボディはありません.
  • 抽象メソッドは定義されておらず、メソッド名の後ろにカッコではなくセミコロンが直接付いています.

  • 4.例
    //       
    abstract class people{
    	int age;
    	String name;
    	public abstract void tell();
    }
    
    
    //     
    class student extends people{
    
    	
    	public void tell() {
    		System.out.println("  :"+name+"    :"+age);
    		System.out.println("      ,              !");
    	}
    	
    }
    public class Test02 {
    
    	public static void main(String[] args) {
    		student s = new student();//     
    		s.age = 1;
    		s.name = "lily";
    		s.tell();
    	}
    
    }
    

    二、インタフェース
    1.概念
    インタフェース(英語:Interface)は、JAVAプログラミング言語では抽象的なタイプであり、抽象的な方法の集合であり、インタフェースは通常interfaceで宣言される.1つのクラスは、インタフェースを継承することによって、インタフェースの抽象的な方法を継承します.
    インタフェースはクラスではなく、インタフェースを記述する方法はクラスと似ていますが、異なる概念に属しています.クラスは、オブジェクトのプロパティとメソッドを記述します.インタフェースには、クラスが実装する方法が含まれます.
    インタフェースを実装するクラスが抽象クラスでない限り、クラスはインタフェース内のすべてのメソッドを定義します.
    インタフェースはインスタンス化できませんが、実装できます.インタフェースを実装するクラスは、インタフェースに記述されているすべてのメソッドを実装する必要があります.そうしないと、抽象クラスとして宣言する必要があります.さらに、Javaでは、インタフェースタイプを使用して変数を宣言したり、空のポインタになったり、このインタフェースで実装されたオブジェクトにバインドされたりすることができます.
    2.インタフェースとクラスの類似点
    1つのインタフェースには複数の方法があります.
    インタフェースファイルは.JAvaの最後のファイルでは、ファイル名にインタフェース名が使用されます.
    インタフェースのバイトコードファイルは.classの最後のファイルにあります.
    インタフェースに対応するバイトコードファイルは、パッケージ名に一致するディレクトリ構造にある必要があります.
    .
          3.インタフェースとクラスの違い:
  • インタフェースは、オブジェクトをインスタンス化するために使用できません.
  • インタフェースには構築方法がありません.
  • インタフェース内のすべての方法は抽象的な方法でなければならない.
  • インタフェースにはstaticおよびfinal変数を除くメンバー変数は含まれません.
  • インタフェースはクラスに継承されるのではなく、クラスによって実現される.
  • インタフェースはマルチ継承をサポートします.

  •        4.インタフェース特性
  • インタフェースの各メソッドも暗黙的に抽象的であり、インタフェースのメソッドは暗黙的にpublic abstractとして指定されます(public abstractのみで、他の修飾子はエラーを報告します).
  • インタフェースには変数を含めることができますが、インタフェースの変数はpublic static final変数として暗黙的に指定されます(publicのみでprivate修飾でコンパイルエラーが報告されます).
  • インタフェースの方法はインタフェースで実現できず、インタフェースを実現するクラスによってのみインタフェースの方法を実現することができる.

  • 5.例
    //インタフェースの定義
    interface inf{
    	public static final int AGE = 100;
    	public abstract void tell();
    }
    interface jie{
    	
    	public abstract void say();
    }
    
    
    //      
    class A implements inf,jie{
    
    	
    	public void tell() {
    		System.out.println("     ");
    	}
    
    	
    	public void say() {
    		System.out.println("     ");
    		
    	}
    	
    }
    public class Test03 {
    
    	public static void main(String[] args) {
    		A a =new A();//     
    		a.tell();
    		System.out.println(inf.AGE);
    		a.say();
    	}
    
    }
    

    三、抽象クラスとインタフェースの違い
  • 抽象クラスのメソッドにはメソッド体があり,メソッドの具体的な機能を実現できるが,インタフェースのメソッドはだめである.
  • 抽象クラスのメンバー変数は様々なタイプであってもよく、インタフェースのメンバー変数はpublic static finalタイプのみである.
  • インタフェースには、静的コードブロックおよび静的メソッド(staticで修飾されたメソッド)は含まれませんが、抽象クラスには静的コードブロックおよび静的メソッドがあります.
  • クラスは1つの抽象クラスしか継承できませんが、1つのクラスは複数のインタフェースを実現できます.