Java——インタフェース編

6701 ワード

一、インタフェース(一)の概要とその特徴物事の機能の拡張性を体現するために、Javaではインタフェースを提供してこれらの追加機能を定義し、具体的な実現を与えず、将来どの猫犬が訓練される必要があるのか、この部分の猫犬がこれらの追加機能を実現するだけでよい.(例えば、前述の猫犬、猫が火の輪をくぐり、犬がドアを見るのは、最初からできるのではなく、訓練を経て来た)特徴:1.インタフェースはキーワードinterfaceでフォーマットを表す:interfaceインタフェース名{}2.クラス実装インタフェースはimplementsでフォーマットを表す:classクラス名implementsインタフェース名{}3.インタフェースは実例化できないが、インタフェースはどのように実例化されるのだろうか.マルチステート方式でインスタンス化します.4.インタフェースのサブクラス1)は抽象クラスであってもよい.しかし、意味はあまりありません.2)特定のクラスであってもよい.インタフェース内のすべての抽象メソッドを書き換える.メンバーの特徴:A:インタフェースメンバーの特徴メンバー変数;定数でしかなく、静的です.デフォルトの修飾子:public static final推奨:自分で手動で与えます.構築方法:インタフェースに構築方法がありません.メンバーメソッド:抽象メソッドのみです.デフォルトの修飾子:public abstract推奨:自分で手動で与えます.二、クラスとクラス、クラスとインタフェース、インタフェースとインタフェースの関係(一)1.クラスとクラス:継承関係、単一継承のみ可能、多層継承可能.2.クラスとインタフェース:実現関係、単一実現可能、複数実現可能.また、一つのクラスを継承すると同時に複数のインタフェースを実現することもできる.3.インタフェースとインタフェース:継承関係、単一継承可能、複数継承可能.(二)抽象クラスとインタフェースの違い1.メンバーの違い抽象クラス:メンバー変数:変数可能、定数構築方法:メンバーメソッドあり:抽象可能、非抽象インタフェース可能:メンバー変数:定数メンバーメソッドのみ:抽象可能2.関係区別クラスとクラス継承、単一継承クラスとインタフェース実装、単一実装、マルチ実装インタフェースとインタフェース継承、単一継承、多継承3.設計理念区別抽象類が継承されるのは、「is a」の関係である.抽象類に定義されるのは、その継承体系の共通機能である.インタフェースが実現されるのは、「like a」の関係である.インタフェースに定義されるのは、その継承体系の拡張機能である.インタフェースの例(猫犬ケース):分析:動物類:名前、年齢、食事、寝る.動物育成インターフェース:高跳び猫継承動物類犬継承動物類一部猫継承猫類継承猫類継承猫類継承犬類継承犬類継承犬類実現高跳びインターフェース抽象類テスト基本機能通過.インターフェーステストにより拡張機能を実現する.
//   :
public abstract class Animal {
    public String name;
    public int age;
    public abstract void eat();
    public abstract void sleep();
}
//  :
public class Cat extends Animal {
    public void eat() {
        System.out.println("  ");
    }
    public void sleep() {
        System.out.println("     ");
    }
}

public class KittyCat extends Cat implements JumpInterface{
    public void eat() {
        System.out.println("hello kitty      ");
    }
    public void sleep() {
        System.out.println("kitty       ");
    }
    public void jump() {
        System.out.println("kitty                   ");
    }
}

public class TomCat extends Cat{
    public void eat() {
        System.out.println("tom      ");
    }
    public void sleep() {
        System.out.println("tom       ");
    }
}
//    :
public interface JumpInterface {
    public abstract void jump();
}

三、パラメータ伝達と戻り値タイプのインスタンス(一)クラス名をパラメータとして--クラスのオブジェクトを伝達する
public class MyTest {
    public static void main(String[] args) {
        Student student = new Student();
        //              ,        ,          
        setStudent(new Student(),100);
        student.set(1000);
        student.show();
    }
    public static void setStudent(Student student,int num){
        student.age=num;
    }
}
class Student{
    int age;
    public void set(int num){
        this.age=num;
    }
    public void show(){
        System.out.println(age);
    }
}

(二)抽象クラス名を形参として--その抽象クラスのサブクラスオブジェクトを伝える
public class MyTest {
    public static void main(String[] args) {
    //              ,          ,
        MyClass myClass = new MyClass();
        set(myClass,108);
        myClass.show(106); //
    }
    public static void set(AA aa,int num){
        aa.num=num;
        aa.show2();
    }
}
abstract class AA{
    int num=10;
    public abstract void show(int num);
    public void show2(){
        System.out.println("   "+num);
    }
}
class MyClass extends AA{
    int num=20;
    public void show(int num) {
        System.out.println(num+this.num);
    }
}

(3)抽象クラス名を戻り値タイプとして--その抽象クラスのサブクラスオブジェクトを返す
public class MyTest {
    public static void main(String[] args) {
    //                 ,        
        AA a = set(new BB(), 12);
        a.show(16);
    }
    public static AA set(AA aa,int num){
        BB bb = new BB();
        bb.num=num;
       return bb;
    }
}
abstract class AA{
    int num=10;
    public abstract void show(int num);
}
class BB extends AA{
    int num = 1;
    public void show(int num) {
        System.out.println(this.num);
        System.out.println(num+this.num+super.num);//38 27 27 38 27
    }
}

(四)インタフェース名をパラメータとして--インタフェースのサブクラスオブジェクトを渡す
public class MyTest {
    public static void main(String[] args) {
    //              ,       
        MyB myB = new MyB();
        set(new MyB(),108);
    }
    public static void set(B b,int num){
        b.show(num);
    }
}
interface B{
    int num=10;
    public abstract void show(int num);
}
class MyB implements B{
    int a=10;
    public void show(int num) {
        System.out.println(num+a);
    }
}

(五)インタフェース名を戻り値タイプとして、そのインタフェースのサブクラスオブジェクトを返す
public class MyTest {
    public static void main(String[] args) {
     //                         
        A a = set(new B(), 10);
        a.show(1);
    }
    public static A set(A a, int num) {
        B b = new B();
        b.num2 = num;
        return b;
    }
}
interface A {
    int num = 106;
    void show(int num);
}
class B implements A {
    int num2 = 20;
    public void show(int num) {
        System.out.println(num + this.num);
    }
}

(六)チェーンプログラミング-メソッドを呼び出した後、このメソッドの戻り値がオブジェクトである場合、ドットを続けて、このオブジェクトのメソッドを呼び出すことができます.
public class MyTest {
    public static void main(String[] args) {
        //Dog dog = new Dog();
        //Dog dog1 = dog.getDog(new Dog(), 2);
        //dog1.show();
        new Dog().getDog(new Dog(), 2).show();
    }
}
class Dog {
    int num = 1;
    public Dog getDog(Dog dog, int num) {
        dog.num = num;
        return this;//this               ,    this    
    }
    public void show() {
        System.out.println(num);
    }
}

四、importキーワードの概要と使用とパッケージの下の4種類の権限修飾子(一)ガイドパッケージの概要:異なるパッケージの下のクラス間のアクセスにより、異なるパッケージの下のクラスを使用するたびに、パッケージのフルパスを追加する必要があることがわかりました.面倒です.この場合、javaはガイドパッケージの機能を提供します.ガイドパッケージフォーマットimportパッケージ名;注意:この方法はクラス名にインポートされます.(二)4つのパーミッション修飾子のテスト4つのパーミッション修飾子:private(プライベート)、デフォルト、protected(保護された)、public(共通)
				  	     (      )      (  )     (   )
	private    	 Y		
	  		     Y	           Y
	protected	 Y		       Y		          Y
	public		 Y		       Y		          Y		          Y

(三)クラスとその構成で使用される一般的な修飾子A:修飾子:権限修飾子:private、デフォルト、protected、public状態修飾子:static、final抽象修飾子:abstract B:クラス:権限修飾子:デフォルト修飾子、public状態修飾子:final抽象修飾子:abstract
       :public

C:メンバー変数:権限修飾子:private,デフォルト,protected,public状態修飾子:static,final
       :private

D:構築方法:権限修飾子:private,デフォルト,protected,public
       :public

E:メンバーメソッド:パーミッション修飾子:private,デフォルト,protected,publicステータス修飾子:static,final抽象修飾子:abstract F:それ以外の組合せルール:メンバー変数:public static finalメンバーメソッド:public static public abstract public final