引出接口
接口就是一组规范,所有实现类都需要遵守这个规范,就像生活中的法律一样,每个人都要遵守,法外狂徒另说hhh;或者就像充电器的接口Type-C,规定好这个接口,电脑根据这个规则做出Type-C的充电口,才能充电,能和相同接口的鼠标,键盘,打印机等相连实现需求。
接口的作用(为什么要定义接口)
接口就是比 抽象类 还 抽象 的 抽象类,(接口中只有抽象方法不能定义属性之类的)可以更加规范的对子类进行约束,全面,专业地实现了:规范和具体实现地分离。
接口是两个模块之间通信的标准,通信的规范。
接口和实现类不是父子关系,是实现规则的关系。
定义接口 and 使用接口
定义:
[访问修饰符] interface 接口名 [extends 父接口1, 父接口2...]{、
常量定义;
方法定义;}
说明:
访问修饰符:
public or 默认 (default) 别的不行
接口名:
和类名采用相同命名机制
extends:
可以多继承
常量:
接口中的属性只能是常量,总是 public static final 修饰。不写默认就是这个
方法:
接口中的方法只能是抽象方法:public abstract。不写默认就是这个
要点
1.子类通过implements来实现接口中的规范
2.接口不能创建实例,但是可以用于声明引用变量类型
3.一个类实现了接口,必须实现接口中的所有方法,并且这些方法都是用public修饰
4.JDK1.8 (不含8)之前接口只能包含静态变量,抽象方法,不能有普通属性,构造方法,普通方法。
测试
接口代码
// fly 接口
public interface fly {
/* public static final */ int b = 8; // 前缀加或不加都一样 默认就是这个
/* public abstract */void fun(); // 前缀加或不加都一样 默认就是这个
}
// fly2 接口
interface fly2{
void fun2();
}
测试接口
// 对接口的测试
public class Test {
}
class car implements fly,fly2{
@Override
public void fun() {
System.out.println("需要实现的方法1");
}
@Override
public void fun2() {
System.out.println("需要实现的方法2");
}
}
JDK 8 以后还能写默认方法,静态方法等方法,能直接调用
interface fly3{
int a = 100;
default void fun3(){
System.out.println("JDK8以后接口中可以写默认方法 用default关键字去定义");
}
static void fun4(){
System.out.println("静态方法也可以创建但是由this接口调用,子类也不能调用," +
"子类可以写一个一样的静态方法,性质类似同名同姓的人,没什么关系,子类的静态方法只能通过子类调用");
}
}