JDK8之前
接口概述、特点
接口用关键字interface来定义,格式如下
//声明一个借口,体现一种规范,规范一定是公开的。
public interface InterFaceDemo{
//在接口中,public final可以省略不写。
//常量
public static final String NAME_INFO="K";
String ID_INFO="123";
//抽象方法
//在接口中,public abstract可以省略不写。
public abstract void run();
void eat();
}
接口的基本使用
接口是用来被类实现(implements)的,实现接口的类称为实现类。实现类可以理解成所谓的子类。
接口可以被类单实现,也可以被类多实现。
public interface law {
public void L();
}
public interface SportMan {
void run();
void competition();
}
public class pingpong implements SportMan,law{
private String name;
public pingpong(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println(name+"run");
}
@Override
public void competition() {
System.out.println(name+"competition");
}
@Override
public void L() {
System.out.println(name+"obey");
}
}
一个类实现接口,必须重写完全部接口的全部抽象方法,否则这个类需要定义成抽象类。
接口的多继承
作用:规范合并,整合多个接口为同一个接口,便于子类实现。
public interface law {
public void L();
}
public interface People {
void eat();
}
public interface SportMan extends law,People{
void run();
void competition();
}
public class pingpong implements SportMan{
private String name;
public pingpong(String name) {
this.name = name;
}
@Override
public void eat() {
}
@Override
public void run() {
}
@Override
public void competition() {
}
@Override
public void L() {
}
}
JDK8开始新增方法
默认方法
default修饰,实现类对象调用
public interface test {
default void run(){
System.out.println("run");
}
}
静态方法
static修饰,必须用当前接口名调用
public interface test1 {
static void inadrr(){
System.out.println("inadrr");
}
}
class test2 implements test1{
}
class T{
public static void main(String[] args) {
test2 s=new test2();
test1.inadrr();
//s.inadrr();//报错
}
}
私有方法
private修饰,jdk9开始才有,只能在接口内部被调用
public interface test {
default void run(){
System.out.println("run");
go();;
}
private void go(){
System.out.println("go");
}
}
总结
1.接口不能创建对象
2.一个类实现多个接口,多个接口中有同样的静态方法不冲突,因为接口的静态方法只能用接口调用。
3.一个类既继承了父类又实现了接口,父类中和接口中同名方法,默认用父类。
class A extends B implements C{
}
4.一个类实现了多个接口,多个接口中存在同名的默认方法,不冲突,这个类重写该方法就可以。
5.一个接口继承多个接口时,如果多个接口中存在规范冲突则不能多继承。