白はJavaSE-day 07のインタフェースを学びます


インタフェース
1、インタフェースの紹介
インタフェースは、双方を制約するための仕様(ルール)です.インタフェースルールを定義すると、インタフェースのルールの下で具体的なコード実装を行い、双方の間で通信することができます.
例:天候データ
各サイトは天気データを表示する必要があるかもしれませんが、データは中央気象局にあります.中央気象局は天気を取得するデータインタフェースを提供し、各サイトはこのインタフェース規範に基づいてデータを伝達し、最終的にある地域の天気情報を取得することができる.
2、Javaで提供するインタフェース
     interface     {
     
    //     
    //         
}

インタフェースの名前とクラス名の表記規範は一致しています.複数の単語は単語の頭文字が大文字です.
インタフェースの変数:固定修飾子(public static final)
インタフェース内のメソッド:JDk 8の前に、インタフェースでは抽象メソッドしか定義できません(public abstract)
//	    
interface Inter{
     
	//	       final  ,           
	//	   :ctrl + shift + x
	//	   :ctrl + shift + y
	public static final int NUMBER = 12;
	int AGE = 33;
	
	public abstract void demo();
	void func();	
}

インタフェースの変数や抽象メソッドにはデフォルトの修飾があるので、書くときに省略できます.
しかし、書き方をするときは、publicと書いておくことをお勧めします.
3、インタフェースの使用
一般的なインタフェースのメソッドは抽象的なメソッド(JDK 8以前)であり,インタフェースのメソッドを実装するためにクラスが必要であり,そのクラスのオブジェクトを作成し,関連するメソッドを使用する必要がある.
クラスとクラス間:継承関係、および単一継承
class A{
     }
class B extends A{
     }
class C extends B{
     }

インタフェースとクラス間:実装関係であり、implementsキーワードを使用し、1つのクラスが複数のインタフェースを同時に実装できます.
interface Inter1{
     }
interface Inter2{
     }
interface Inter3{
     }
class Demo implements Inter1,Inter2,Inter3{
     
    //           ,           (  )
    //                   ,             
}

インタフェースとインタフェースの間:継承関係であり、マルチ継承
interface Inter1{
     }
interface Inter2{
     }
interface Inter3{
     }
interface Inter4 extends Inter1, Inter2 , Inter3{
     }

複数のインタフェースに同名の抽象メソッドがあっても、最終的にはインタフェースに継承されますが、抽象メソッドであり、最終的にはクラスが抽象メソッドを複写する必要があり、最終的には実装クラスのオブジェクトを作成し、クラスの複写メソッドを呼び出して関連機能を完了します.

interface Inter1{
     
	public void demo();
	public void method();
}
interface Inter2{
     
	public void demo();
	public void func();
}
//	            ,        
interface Inter3 extends Inter1 , Inter2{
     

}
//	            
class Demo implements Inter3{
     
	public void demo() {
     }
	public void method() {
     }
	public void func() {
     }
}

public class InterfaceDemo {
     
	public static void main(String[] args) {
     
		Demo d = new Demo();
		d.demo();
				
	}
}


複数のインタフェースに同じ名前の変数が存在する場合、クラスまたはサブインタフェース呼び出しを実装する際にも不確実性が発生します.この場合、対応するインタフェース名で変数を呼び出す必要があります.
interface Inter1{
     
    int X = 12;
}
interface Inter2{
     
    int X = 34;
}
interface Inter3 extends Inter1, Inter2{
     }
class Demo implements Inter3{
     
    
}
class Test{
     
    public static void main(String[] args) {
     
    	Demo d = new Demo();
        //	d.x        
        //  Inter1.X      Inter2.X           
    }
}

インタフェースを定義するときは、できるだけ名前の変数を変更しないことをお勧めします.
4、インタフェースケース
親と子:それらは常に同じシステムに属します.親に記述された動作(方法)は、このシステムで共有されているに違いない.
インタフェース:一般的に記述されている動作は、システム全体の外のいくつかの追加(特殊な動作)に属します.
/*
 * 	    : 、 、 ,        Animal
 * 	                             ,              
 */
abstract class Animal{
     
	//	           eat  
	public abstract void eat();
}

//	     
interface AntiDrug{
     
	public void antiDrug();
}

//	Dog             
class Dog extends Animal implements AntiDrug{
     
	public void eat() {
     
		System.out.println("   ");
	}
	//	       
	public void antiDrug() {
     
		System.out.println("   ");
	}
}
class Cat extends Animal{
     
	public void eat() {
     
		System.out.println("  ");
	}
}
//Pig             
class Pig extends Animal implements AntiDrug{
     
	public void eat() {
     
		System.out.println("  ");
	}
	//	       
	public void antiDrug() {
     
		System.out.println("   ");
	}
}
public class InterfaceDemo2 {
     
	public static void main(String[] args) {
     
		Dog d = new Dog();
		d.eat();
		
		Pig p = new Pig();
		p.antiDrug();
		
	}
}

5、JDK 8以降のインタフェース書き
/*
 * 	JDK8              
 * 	    :      default     
 */
interface Inter{
     
	int X = 12;
	public void demo();
	//	JDK8            
	default void func() {
     
		System.out.println("    default  ");
		method();
	}
	//	JDK11            
	static void run() {
     
		System.out.println("    static  ");
		//	         
		//method();
	}
	//	JDK11            
	private void method() {
     
		System.out.println("        ");
	}
}
//	        Impl
class InterImpl implements Inter{
     
	public void demo() {
     
		
	}
}
public class InterfaceDemo3 {
     
	public static void main(String[] args) {
     
		Inter.run();
		InterImpl ii = new InterImpl();
		ii.func();
		ii.demo();
				
	}
}