JAVAインタフェースに関する知識は、この記事で十分です


「JAVAを学んで、この編を見れば十分」シリーズを通じて、読者にJAVAに関する知識を深く理解してもらいたい.シロから大牛まで、一歩一歩歩いて、少しずつ勉強しなければなりません!
文書ディレクトリ
  • は「JAVAを学んで、この編を見れば十分だ」シリーズを通じて、読者たちにJAVAに関する知識を深く理解させることを望んでいる.シロから大牛まで、一歩一歩歩いて、少しずつ勉強しなければなりません!
  • 1.インタフェースの定義
  • インタフェースの定義方法:インタフェースのメンバー
  • を定義します.
  • 注意事項
  • 2.インタフェースの使用
  • 3.JDK1.8ポスト新機能
  • 1.インタフェースの定義
    1.インタフェースはinterfaceを使用して定義.Javaでは,インタフェースとクラスが並列した2つの構造である.
    インタフェースの定義方法:インタフェースのメンバーの定義
    3.1 JDK 7以前:グローバル定数と抽象方法>グローバル定数:public static finalのみを定義する.しかし、書くときは、書かない>抽象的な方法:public abstractの
    3.2 JDK 8:グローバル定数および抽象メソッドの定義に加えて、静的メソッド、デフォルトメソッドも定義できます(以下参照)
    注意事項
    4.インタフェースでコンストラクタを定義できません!インタフェースがインスタンス化できないことを意味する.Java開発では、インタフェースは、インタフェース内のすべての抽象メソッドを実装クラスに実装(implements)させることによって使用する.実装クラスがインタフェース内のすべての抽象メソッドを上書きしていない場合、この実装クラスは抽象クラス6である.Javaクラスは複数のインタフェースを実現することができる-->Java単一継承性の限界を補うフォーマット:class AA extends BB implements CC,DD,EE 7.インタフェースとインタフェースとの間で継承することができ、さらに多く継承することができる.インタフェースの具体的な使用は、多態性を体現する.インタフェースは、実際には規範と見なすことができます
    面接問題:抽象類とインタフェースにはどのような異同がありますか.
    package java1;
    
    public class InterfaceTest {
    	public static void main(String[] args) {
    		System.out.println(Flyable.MAX_SPEED);
    		System.out.println(Flyable.MIN_SPEED);
    //		Flyable.MIN_SPEED = 2;
    		
    		Plane plane = new Plane();
    		plane.fly();
    	}
    }
    
    
    interface Flyable{
    	
    	//    
    	public static final int MAX_SPEED = 7900;//      
    	int MIN_SPEED = 1;//   public static final
    	
    	//    
    	public abstract void fly();
    	//   public abstract
    	void stop();
    	
    	
    	//Interfaces cannot have constructors
    //	public Flyable(){
    //		
    //	}
    }
    
    interface Attackable{
    	
    	void attack();
    	
    }
    
    class Plane implements Flyable{
    
    	@Override
    	public void fly() {
    		System.out.println("      ");
    	}
    
    	@Override
    	public void stop() {
    		System.out.println("       ");
    	}
    	
    }
    
    abstract class Kite implements Flyable{
    
    	@Override
    	public void fly() {
    		
    	}
    	
    }
    
    class Bullet extends Object implements Flyable,Attackable,CC{
    
    	@Override
    	public void attack() {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void fly() {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void stop() {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void method1() {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void method2() {
    		// TODO Auto-generated method stub
    		
    	}
    	
    }
    //************************************
    
    interface AA{
    	void method1();
    }
    interface BB{
    	
    	void method2();
    }
    
    interface CC extends AA,BB{
    	
    }
    
    

    2.インタフェースの使用
  • 1.インタフェースの使用も多態性
  • を満たす.
  • 2.インタフェースは、実際には仕様
  • を定義する.
  • 3.開発中、インタフェース向けプログラミングを体得!
  • 		//1.                  
    		Flash flash = new Flash();
    		com.transferData(flash);
    		
    		//2.                  
    		com.transferData(new Printer());
    		
    		//3.                  
    		USB phone = new USB(){
    
    			@Override
    			public void start() {
    				System.out.println("      ");
    			}
    
    			@Override
    			public void stop() {
    				System.out.println("      ");
    			}
    			
    		};
    		com.transferData(phone);
    		
    		
    		//4.                 
    		
    		com.transferData(new USB(){
    			@Override
    			public void start() {
    				System.out.println("mp3    ");
    			}
    
    			@Override
    			public void stop() {
    				System.out.println("mp3    ");
    			}
    		});
    
    
    package java1;
    
    public class USBTest {
    	public static void main(String[] args) {
    		
    		Computer com = new Computer();
    		//1.                  
    		Flash flash = new Flash();
    		com.transferData(flash);
    		
    		//2.                  
    		com.transferData(new Printer());
    		
    		//3.                  
    		USB phone = new USB(){
    
    			@Override
    			public void start() {
    				System.out.println("      ");
    			}
    
    			@Override
    			public void stop() {
    				System.out.println("      ");
    			}
    			
    		};
    		com.transferData(phone);
    		
    		
    		//4.                 
    		
    		com.transferData(new USB(){
    			@Override
    			public void start() {
    				System.out.println("mp3    ");
    			}
    
    			@Override
    			public void stop() {
    				System.out.println("mp3    ");
    			}
    		});
    	}
    }
    
    class Computer{
    	
    	public void transferData(USB usb){//USB usb = new Flash();
    		usb.start();
    		
    		System.out.println("         ");
    		
    		usb.stop();
    	}
    	
    	
    }
    
    interface USB{
    	//  :    、 、          
    	
    	void start();
    	
    	void stop();
    	
    }
    
    class Flash implements USB{
    
    	@Override
    	public void start() {
    		System.out.println("U     ");
    	}
    
    	@Override
    	public void stop() {
    		System.out.println("U     ");
    	}
    	
    }
    
    class Printer implements USB{
    	@Override
    	public void start() {
    		System.out.println("       ");
    	}
    
    	@Override
    	public void stop() {
    		System.out.println("       ");
    	}
    	
    }
    

    3.JDK1.8以降の新しい機能
    1.親を継承してインタフェースが実装されている場合、インタフェースにデフォルトのメソッドがあり、同じ名前のメソッドが存在する場合、子クラスはこのメソッドを書き換えていない場合、デフォルトで親の同じ名前のパラメータのメソッドを呼び出します.->類優先原則【知識点3】2.インプリメンテーション・クラスが複数のインタフェースを実装し、複数のインタフェースで同じ名前のパラメータのデフォルト・メソッドが定義されている場合、インプリメンテーション・クラスがこのメソッドを書き換えていない場合、エラーが表示されます.->インタフェースの競合.これは、実装クラスでこの方法「知識点4」を書き換える必要がある.サブクラス(または実装クラス)のメソッドで親クラス、インタフェースで書き換えられたメソッドを呼び出す方法【知識点5】
    	public void myMethod(){
    		method3();//            
    		super.method3();//          
    		//          
    		CompareA.super.method3();
    		CompareB.super.method3();
    	}
    

    5つの知識点があり、以下のコードに説明があります.
    package java8;
    
    public class SubClassTest {
    	
    	public static void main(String[] args) {
    		SubClass s = new SubClass();
    		
    //		s.method1();
    //		SubClass.method1();
    		//   1:          ,         。
    		CompareA.method1();
    		//   2:        ,            。
    		//                ,   ,             
    		s.method2();
    		//   3:    (    )                         ,
    		//                ,                  。-->     
    		//   4:            ,                    ,
    		//                 ,  。-->    。
    		//                  
    		s.method3();
    		
    	}
    	
    }
    
    class SubClass extends SuperClass implements CompareA,CompareB{
    	
    	public void method2(){
    		System.out.println("SubClass:  ");
    	}
    	
    	public void method3(){
    		System.out.println("SubClass:  ");
    	}
    	
    	//   5:     (    )        、         
    	public void myMethod(){
    		method3();//            
    		super.method3();//          
    		//          
    		CompareA.super.method3();
    		CompareB.super.method3();
    	}
    }