JAvaは3年間開発して、これらのインタフェースはあなたはすべて使うことができなくて、どうしてあなたに給料を上げますか??


インタフェースの概要:
1、インタフェースはJava言語の参照タイプであり、メソッドの「集合」であるため、インタフェースの内部は主に定義メソッドであり、定数、抽象メソッド(JDK 7および以前)、デフォルトメソッドと静的メソッド(JDK 8)、プライベートメソッド(jdk 9)を追加する.
インタフェースの定義は、クラスの定義と似ていますが、interfaceキーワードを使用します.クラスではなく、別の参照データ型であることを明確にする必要があります.
public classクラス名.java->.class
public interfaceインタフェース名.java->.class
インタフェースの使用は、オブジェクトを作成することはできませんが、継承されるのと同様に実装できます.インタフェースを実装するクラス(インタフェースのサブクラスと見なすことができる)は、インタフェース内のすべての抽象メソッドを実装する必要があります.このクラスオブジェクトを作成すると、メソッドを呼び出すことができます.そうしないと、抽象クラスでなければなりません.2、理論だけでは足りないので、2020年最新の5大JAVAアーキテクチャプロジェクトの実戦教程と大工場面接問題庫を無料でプレゼントします.興味があれば、スカート783802103を手に入れることができます.
フォーマットの定義
public interface      {
    //   
    //     
    //     (jdk8)
    //     (jdk8)
    //     (jdk9)
}

ケース
public interface IA {
    //          public static final            
    public static final int NUM1 = 10;
    int NUM2 = 20;

    //            public abstract  2        
    public abstract void method1();
    void method2();

    //            public default public       ,default     
    public default void method3(){
        System.out.println("     method3");
    }

    default void method4(){
        System.out.println("     method4");
    }

    //     : public static    static         public    
    public static void method5(){
        System.out.println("     method5");
    }

     //          private static         
     private static void method6(){
        System.out.println("       method6");
    }

    //           private  
    private  void method7(){
        System.out.println("       method7");
    }
}

public class Test {
    public static void main(String[] args) {
       
        System.out.println(IA.NUM1);// 10
    }

    //        ,         ( )
    void method(){

    }
}



インタフェース内のメンバーのアクセス特性
インタフェースのメンバー・アクセスの特徴の概要
            :
                      :           
                        :        
                        :        (          ,            )
                        :         ,       
                        :           ,       


ケーススタディ
public interface IA {
    //        :           
    public static final int NUM = 10;

    //         :        
    public abstract void method1();

    //         :         (          ,            )
    public default void method2(){
        System.out.println("    method2");
        method4();
        method5();
    }

    //         :         ,       
    public static void method3(){
        System.out.println("    method3");
        method5();
    }

    //         :           ,       
    private void method4(){//              
        //    
        method5();
    }

    private static void method5(){//
        //    
    }
}

   :

public class ImpA implements IA{

   /* @Override
    public void method2() {

    }*/

    @Override
    public void method1() {
        System.out.println("      method1    ");
    }
}


   :

public class Test {
    public static void main(String[] args) {
      
        System.out.println(IA.NUM);// 10

        //        ,  NUM  
        ImpA ia = new ImpA();
        System.out.println(ia.NUM);// 10

        //   method2  
        ia.method2();

        //                
        IA.method3();
        //ia.method3();//     ,
    }
}


マルチインプリメンテーション時のいくつかの競合状況
共通の静的定数の競合:複数の親インタフェースで、同じ定数を継承できません-共通の抽象メソッドの競合:実装クラスは共通のデフォルトメソッドの競合を書き直さなければなりません:実装クラスは共通の静的メソッドの競合を書き直さなければなりません:影響がありません.静的メソッドの実装クラスはプライベートメソッドの競合を継承できません:影響がありません.プライベートメソッドは本インタフェースで直接アクセスできるため、インプリメンテーションクラスはインプリメンテーションクラス書き換えインタフェースのデフォルトメソッドを継承できず、defaultを追加する必要はありません.
公有静的定数の衝突
クラスが競合を継承しない変数を実装
interface IA{
    public static final int a = 10;
    public static final int b= 20;
}
interface IB{
    public static final int a = 30;
}
class Zi implements IA,IB{
    //    b,    a,  a   
}

public class Demo {
    public static void main(String[] args) {
        Zi z = new Zi();
     //   System.out.println(z.a);//    
        System.out.println(z.b);
    }
}



公有抽象的な方法の衝突
実装クラスは1つだけ書き換える必要があります
interface IA{
    public void show();
}
interface IB{
    public void show();
}
class Zi implements IA,IB{
    @Override
    public void show() {//         show()  
        System.out.println("   show()...");
    }
}
public class Demo {
    public static void main(String[] args) {
        Zi z = new Zi();
        z.show();
    }
}


共通のデフォルトメソッドの競合
実装クラスは最終バージョンを書き換える必要があります
interface IA{
    public default void show(){
        System.out.println("IA");
    }
}
interface IB{
    public default void show(){
        System.out.println("IB");
    }
}
class Zi implements IA,IB{
    @Override
    public void show() {//       show()
        System.out.println("Zi show()....");
    }
}
public class Demo {
    public static void main(String[] args) {
        Zi z = new Zi();
        z.show();
    }
}



公有静的メソッドの競合
静的メソッドは直接インタフェースに属し,継承されないため衝突はない.
interface IA{
    public static  void show(){
        System.out.println("IA");
    }
}
interface IB{
    public static void show(){
        System.out.println("IB");
    }
}
class Zi implements IA,IB{

}
public class Demo {
    public static void main(String[] args) {
        Zi z = new Zi();
        z.show();//    ,show()     。
    }
}




プライベートメソッドの競合
プライベートメソッドは、このインタフェースでのみ直接使用でき、競合はありません.
インタフェースとインタフェースの関係
インタフェースは、別のインタフェースから継承できます.また、マルチ継承できます.
interface IA{}
interface IB{}
interface IC extends IA,IB{// “  ”,    “   ”
}

インタフェース継承インタフェースの競合
公有静的定数の競合:継承できない、公有抽象メソッドを使用できない競合:公有デフォルトメソッドの競合のみを継承する競合:公有静的メソッドとプライベートメソッドの競合を書き直さなければならない:影響なし、布団インタフェースで継承できないため
公有静的定数の衝突
interface IA{
    public static final int a = 10;
    public static final int b = 30;
}
interface IB{
    public static final int a = 20;
}
interface IC extends IA,IB{//    a
}
//  :
main(){
    System.out.println(IC.a);//   
}


共有抽象メソッドの競合
interface IA{
    public void show();
}
interface IB{
    public void show();
}
interface IC extends IA,IB{//IC      show()
}
class Zi implements IC{
    //    show()
    public void show(){
    }
}


共通のデフォルトメソッドの競合
interface IA{
    public default void d1(){
    }
}
interface IB{
    public default void d1(){
    }
}
interface IC extends IA,IB{//      d1()
    public default  void d1(){
    }
}


公有静的メソッドとプライベートメソッド
衝突しません.静的メソッドは直接インタフェースに属するため、インタフェースを使用して直接アクセスするしかありません.プライベートメソッドはインタフェースにアクセスするしかありません.また、クラスが親クラスを継承し、インタフェースを実装するときの衝突もありません.
フォーマットの定義
public class      extends     implements    1,   2,...{           }

実装クラスが親を継承し、インタフェースを実装するときの競合:
パブリック静的定数の競合->パブリック抽象メソッドを継承していない競合->パブリックデフォルトメソッドの競合の書き換え->優先親パブリック静的メソッド->優先親プライベートメソッドの競合->競合なし
親クラスとインタフェースの共通静的定数の競合
class Fu{
    public static final int a = 10;
}
interface IA{
    public static final int a = 20;
}
class Zi extends Fu implements IA{//    a  
}
public class Demo {
    public static void main(String[] args) {
        System.out.println(Zi.a);//    
    }
}



親とインタフェースの抽象メソッドの競合
abstract class Fu{
    public abstract void show();
}
interface IA{
    public void show();
}
class Zi extends Fu implements IA{//     
    
}
//  :
main(){
    Zi z = new Zi();
    z.show();//a
}



親とインタフェースの共通のデフォルトメソッドの競合
class Fu{
    public void show(){
        System.out.println("a");
    }
}
interface IA{
    public default void show(){
        System.out.println("b");
    }
}
class Zi extends Fu implements IA{
}
//  :
main(){
    Zi z = new Zi();
    z.show();//a
}


親とインタフェースの共通静的メソッド
class Fu{
    public static void show(){
        System.out.println("fu...");
    }
}
interface IA{
    public static void show(){
        System.out.println("IA...");
    }
}
class Zi extends Fu implements IA{//    "  "     ,           

}
public class Demo {
    public static void main(String[] args) {
        Zi.show();//fu…
    }
}


親とインタフェースのプライベートメソッド
競合なし
最後に
みんなは何か分からないことがあったら私を探してください.また、2020年最新5大JAVAアーキテクチャプロジェクトの実戦教程と大工場面接問題庫を無料でプレゼントします.興味があれば、スカート783802103を手に入れることができます.
本文の文字とピクチャーはネットに由来して自分の考えをプラスして、ただ学习して、交流して使うだけで、いかなる商业の用途がなくて、著作権は原作者の所有に帰って、もし问题があれば直ちに私达に连络して処理してください