/**
 * @author Zuoyueer
 * @projectName JavaNote
 * @description: 接口总结
 * @date 2019/9/3023:43
 */
public interface A {
    /*
     * 接口中的成员:     接口编译之后有字节码文件 ,接口不能有构造函数,无法直接创建对象,不能写静态代码块
     *           1.常量:
     *                   默认修饰符public static final ,可以省略
     *                   常量可以在子类中方法直接使用,相当于被继承过来的
     *                   常量可以被接口直接使用,    接口名.常量名
     *                   常量可以被子类对象或者子类调用,  子类名.常量名
     *           2.抽象方法:
     *                   默认修饰符public abstract ,可以省略
     *                   非抽象子类必须实现接口全部抽象方法
     *           3.默认方法:
     *                   格式必须是  public default 返回类型 方法名(参数列表){具体代码}
     *                   默认方法供子类重写或者调用, 重写的时候不能写default关键字
     *           4.静态方法:
     *                   格式必须是: public static 返回类型 方法名(参数列表){具体代码}
     *                   只能接口直接调用,子类不能调用.  这一点和继承是不一样的.继承里面子类可以使用父类的非私有静态方法
     *           5.私有方法:
     *                    私有普通方法:
     *                               格式:private 返回类型 方法名(参数列表){具体代码}
     *                               只能供本接口的默认方法调用
     *                    私有静态方法:
     *                               格式:private static 返回类型 方法名(参数列表){具体代码}
     *                                只能供本接口的静态方法,默认方法,其他私有方法调用
     * 接口和类之间的关系:
     *             单实现:
     *                       略.
     *             多实现:
     *                   1.多个接口中没有重名的抽象方法,那么实现类必须实现全部抽象方法
     *                   2.多个接口中有重名的抽象方法,那么就实现其中一个就可以
     *
     *                   3.多个接口中没有重名的默认方法,那么实现类可以正常使用他们.或者重写他们.
     *                   4.多个接口中有重名的默认方法,那么实现类必须重写其中一个
     *
     * 接口和接口之间的关系:
     *              单继承:一个接口继承一个父接口
     *                     格式: public interface 接口A extends 接口B{
     *                           }
     *              多继承:一个接口同时继承多个父接口
     *                     格式: public interface 接口A extends 接口B,接口C{
     *                           }
     *              多层继承:一个接口继承一个父接口,父接口又继承另外一个父接口
     *                     格式:public interface 接口 extends 接口C{
     *                          }
     *                          public interface 接口A extends 接口B{
     *                          }
     * 特殊情况:当一个类继承一个父类,同时实现一个接口,当父类方法和接口默认方法重名的时候,子类就近调用父类中的方法,重写了那就调用自己的
     *
     * */

    String str = "Liming";//这里不是变量,是常量,因为前面默认修饰符public static final.

    public static final int i = 10;//接口中的常量

    public abstract String method6();//抽象方法,,,。该方法供子类实现使用。非抽象子类必须实现

    public int method();//抽象方法

    void method7();//抽象方法

    static void method2() {  //静态方法.  接口直接调用,子类无法使用,也不会被继承

    }

    static int method3() { //静态方法
        return 1;
    }

    public default void method4() {//默认方法      ,子类调用或者重写

    }

    default int method5() {//默认方法
        return 2;
    }
    //jdk9,才能定义私有方法,
   /* private  int method2(){    //私有方法  ,被接口中的默认方法,静态方法无法访问非静态方法
        return 3;
                                //私有静态方法:默认方法和静态方法可以调用。

    }*/

}

     * 接口中的成员:     接口编译之后有字节码文件 ,接口不能有构造函数,无法直接创建对象,不能写静态代码块
     *           1.常量:
     *                   默认修饰符public static final ,可以省略
     *                   常量可以在子类中方法直接使用,相当于被继承过来的
     *                   常量可以被接口直接使用,    接口名.常量名
     *                   常量可以被子类对象或者子类调用,  子类名.常量名
     *           2.抽象方法:
     *                   默认修饰符public abstract ,可以省略
     *                   非抽象子类必须实现接口全部抽象方法
     *           3.默认方法:
     *                   格式必须是  public default 返回类型 方法名(参数列表){具体代码}
     *                   默认方法供子类重写或者调用, 重写的时候不能写default关键字
     *           4.静态方法:
     *                   格式必须是: public static 返回类型 方法名(参数列表){具体代码}
     *                   只能接口直接调用,子类不能调用.  这一点和继承是不一样的.继承里面子类可以使用父类的非私有静态方法
     *           5.私有方法:
     *                    私有普通方法:
     *                               格式:private 返回类型 方法名(参数列表){具体代码}
     *                               只能供本接口的默认方法调用
     *                    私有静态方法:
     *                               格式:private static 返回类型 方法名(参数列表){具体代码}
     *                                只能供本接口的静态方法,默认方法,其他私有方法调用
     * 接口和类之间的关系:
     *             单实现:
     *                       略.
     *             多实现:
     *                   1.多个接口中没有重名的抽象方法,那么实现类必须实现全部抽象方法
     *                   2.多个接口中有重名的抽象方法,那么就实现其中一个就可以
     *
     *                   3.多个接口中没有重名的默认方法,那么实现类可以正常使用他们.或者重写他们.
     *                   4.多个接口中有重名的默认方法,那么实现类必须重写其中一个
     *
     * 接口和接口之间的关系:
     *              单继承:一个接口继承一个父接口
     *                     格式: public interface 接口A extends 接口B{
     *                           }
     *              多继承:一个接口同时继承多个父接口
     *                     格式: public interface 接口A extends 接口B,接口C{
     *                           }
     *              多层继承:一个接口继承一个父接口,父接口又继承另外一个父接口
     *                     格式:public interface 接口 extends 接口C{
     *                          }
     *                          public interface 接口A extends 接口B{
     *                          }
     * 特殊情况:当一个类继承一个父类,同时实现一个接口,当父类方法和接口默认方法重名的时候,子类就近调用父类中的方法,重写了那就调用自己的.

 

接口调用方法的时候,先在接口中找,如果没找到这个方法就编译报错,如果找到了,就执行实现类中的方法.

一句话就是编译看左边,运行看右边

接口调用变量,静态方法的时候,都是调用接口中的,不能调用实现类的,  除非强制类型转换之后才能访问