/**
* @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{
* }
* 特殊情况:当一个类继承一个父类,同时实现一个接口,当父类方法和接口默认方法重名的时候,子类就近调用父类中的方法,重写了那就调用自己的.
接口调用方法的时候,先在接口中找,如果没找到这个方法就编译报错,如果找到了,就执行实现类中的方法.
一句话就是编译看左边,运行看右边
接口调用变量,静态方法的时候,都是调用接口中的,不能调用实现类的, 除非强制类型转换之后才能访问