接口:
接口就是一种公共的规范标准,只要符合规范标准大家都可以通用.
接口的基本定义格式:
接口就是多个类的公共规范.
接口是一种引用数据类型,重要的内容就是其中的,抽象方法
public interface 接口名称{
//接口内容
}
换成了关键字interface之后,编译生成的字节码文件仍然是, java—>.class
接口中可以有:
常量 抽象方法 默认方法 静态方法 私有方法
在任何版本中,接口都能定义抽象方法
public abstract 返回值类型 方法名称(参数类型);
注意事项:接口当中的抽象方法,修饰符必须是两个固定的关键字 ----> public abstract
这两个关键字修饰符,可以选择性的省略,接口当中定义的就是抽象方法。
方法的三要素可以随意定义.
接口中的抽象方法的使用:
接口不能直接使用,必须有一个"实现类"来实现接口.
格式:
public class 实现类名称 implements 接口名称{
//…
}
接口的实现类必须覆盖重写(实现)接口中所有的抽象方法
接口的使用,必须通过他的实现类来完成,接口的实现类必须重写覆盖其中所有的抽象方法。
实现:去掉abstract关键字,加上方法体大括号.
创建实现类对象,进行使用.
如果实现类并没有覆盖从写接口中所有的抽象方法.
那么这个实现类自己就必须是抽象类
抽象类也不能直接创建,也不许new抽象类的子类覆盖重写父类中的抽象方法来完成
接口中默认方法的定义:
从java.8开始,接口里允许定义默认方法,默认方法可以有方法体
public default 返回值类型 方法名称(参数列表){
}
接口当中的默认方法可以解决接口升级的问题
接口中的常量
接口当中可以定义成员变量;
但是必须使用public static final三个关键字来修饰
效果上看,这就是接口的常量.
格式:public static final 数据类型 常量名称 = 数据值;
一旦使用final关键字修饰,说明不可变.
接口中如何定义常量。
注意事项:
接口当中的常量可以省略public static final, 但是不写照样是这三个
接口当中的常量必须赋值,不能不赋值. 必须手动赋值.
接口中常量的名称使用完全大写,用下划线进行分割,这是规范命名.
使用时,直接通过接口名称 . 即可
接口的内容:
成员变量其实就是常量;public static final 数据类型 常量名称 =数据值;
常量必须赋值,名称全部大写,用下划线进行分割
接口中最重要的就是抽象方法
public abstract 返回值类型 方法名称(参数列表);
实现类必须覆盖重写接口中所有的抽象方法,除非接口为抽象类
从java.8开始,接口中允许定义默认方法
public default 返回值类型 方法名称(参数列表){ 方法体 }
默认方法也可以被覆盖重写,如果没有覆盖重写用抽象类的,附近该重写了则使用实现类的
从java.8开始接口中可以定义静态方法
public static 返回值类型 方法名称(参数列表) { 方法体 }
接口中可以定义静态方法。
public可以省略
应该通过接口名称进行调用,不能同通过实现类对象调用接口中的静态方法
从java.9开始,接口允许定义私有方法,
普通私有方法:private 返回值类型 方法名称(参数列表){ 参数列表 }
静态私有方法:private static 返回值类型 方法名称(参数列表){ 方法体 }
private的方法只有接口自己才能调用,不能被实现类或者别人使用.
接口不能有静态代码块。
接口不能有构造方法。
继承关系中子类可以有自己的构造方法。
一个类的直接父类有且只有一个,但是一个类可以同时实现多个接口
public class MyInterImpl implements MyInterA,MyInterB{
//覆盖重写所有的抽象方法
}
如果抽象方法存在相同,只需要覆盖一次即可.
如果实现类没有覆盖重写所有接口当中的抽象方法,那么实现类就必须是一个抽象类.
如果实现类实现的多个接口当中,存在重复的默认方法,,那么实现类一定要对默认的冲突方法覆盖重写
一个类如果直接父类当中的方法和接口当中的默认方法产生冲突,优先用父类.
继承自父类,然后再实现接口,父类中和接口中默认方法相同,优先使用父类.
java中继承优先于接口实现.
类与类之间是单继承的,直接父类只有一个
类与接口是多实现的,一个类可以实现多个接口
接口与接口之间是多继承:
public interface MyInter extends MyInterFaceA,MyInterFaceA { }
多个父接口当中的抽象方法如果重复,没关系
多个父接口当中的默认方法如果重复,那么子接口必须进行默认方法的覆盖重写,而且带着default关键字
default关键字不能省略。
============================