什么是接口
接口就是体现规范的,其中用抽象方法定义一组行为规范,接口是更彻底的抽象
接口体现了真实世界中“如果你是这类事物…则必须完成某些行为…”的思想
接口的定义和特点
接口的格式
public interface 接口名{
常量(其中public static final可以省略不写);
抽象方法(其中public static可以省略不写):
}
接口的特点
JDK8之前的接口中只能出现抽象方法和常量(public static final),没有其他成分(类的五大成分:变量,方法,构造器,代码块,内部类)
接口不能实例化(甚至没有构造器)
接口中所有的成员都是public修饰的,写不写都是,因为接口就是为了规范,规范的目的就是为了公开化(抽象类中的抽象方法不一定是public)
接口的基本使用:被实现
接口是用来被类实现的(implements),实现接口的类被称为实现类,实现类可以理解为所谓的子类
接口实现的格式与特点
格式:
修饰符 class 实现类名 implements 接口1,接口2,接口3…{
}
接口可以被单实现,也可以被多实现
特点
一个类实现接口,如果不全部重写接口的抽象方法,那这个类要被定义为抽象类
接口与接口的关系:多继承
类与类的关系:单继承
类与接口的关系:多实现
接口与接口的关系:多继承
为什么接口可以多继承
当继承的多个接口有一样的方法(规范不能冲突:方法的定义要一样不能一个有返回值一个没有)会合并成一个(规范合并),用类实现时只需要重写一个
public interface Father {
void eat();
}
public interface Mother {
void eat();
}
public interface Son extends Mother,Father {
}
public class LiHua implements Son{
@Override
public void eat() {
}
}
JDK8之后接口新增方法
JDK8版本后,java之多接口的成员方法进行了新增:
允许接口中直接定义带有方法体的方法
新增的原因
一个版本完成后,第二个版本需要对接口新增加几个抽象类,按照原来的规则,则所有实现它的类都要同时新增这几个抽象类的重写
第一种:默认方法
类是之前写的普通实例方法:必须用default修饰
默认会public修饰,需要用接口的实现类来调用
第二种:静态方法
默认会public修饰,必须用static修饰
接口的静态方法必须也只能由本身的接口名来调用
第三种:私有方法
就是私有的实例方法:必须用private修饰。从JDK1.9开始出现
只能在本接口中本其他默认方法或私有方法访问(接口内部可用)
使用接口的注意事项
1.接口不能创建对象
2.一个类实现多个接口,多个接口中有同样的静态方法不冲突(接口的静态方法只能自己调用)
3.一个类继承了父类,又实现了接口,父类中和接口中有同名方法,默认用父类的(就近原则)
4.一个类实现多个接口,多个接口中有同样的默认方法不冲突,重写这个方法就可以了
5.一个接口继承多个接口,是没有问题的,但是多接口中存在规则冲突就不能多继承了