目录
题外话:IDEA在有时会出现莫名的自动导包错误,原因不明,被坑了很多次,注意导包问题
一,接口的介绍
1.接口:是一个引用数据类型,是一种标准,规则
2.关键字:
interface 接口
public interface 接口名{}
implements 实现
实现类 implements 接口名{}
3.接口中可以定义的成员:
jdk7以及之前:
抽象方法: public abstract -> 即使不写public abstract,默认也有
成员变量:public static final 数据类型 变量名 = 值-> 即使不写public static final,默认也有
final是最终的,被final修饰的变量不能二次赋值,所以我们一般将final修饰的变量视为常量
jdk8:
默认方法:public default 返回值类型 方法名(形参){}
静态方法:public static 返回值类型 方法名(形参){}
jdk9开始:
私有方法:
private的方法
二,接口的定义以及使用
1.定义接口:
public interface 接口名{}
2.实现:
public class 实现类类名 implements 接口名{}
3.使用:
a.实现类实现接口
b.重写接口中的抽象方法
c.创建实现类对象(接口不能直接new对象)
d.调用重写的方法
示例,写一个USB接口
public interface USB {
public abstract void open();
public abstract void close();
}
Mouse实现类
public class Mouse implements USB {
@Override
public void open() {
System.out.println("鼠标打开");
}
@Override
public void close() {
System.out.println("鼠标关闭");
}
}
测试类
public class test {
public static void main(String[] args) {
Mouse mouse = new Mouse();
mouse.open();
mouse.close();
}
}
运行示例
三,接口中的成员
1,抽象方法
1.定义格式:
public abstract 返回值类型 方法名(形参);
2.注意:
不写public abstract 默认也有
3.使用:
a.定义实现类,实现接口
b.重写抽象方法
c.创建实现类对象,调用重写的方法
继续用上一个例子
首先接口
不同的是这次的返回值类型是String
public interface USB {
public abstract void open();
String close();
}
实现方法
public class Mouse implements USB{
@Override
public void open() {
System.out.println("鼠标打开");
}
@Override
public String close() {
return "鼠标关闭";
}
}
测试类
public class test {
public static void main(String[] args) {
Mouse mouse = new Mouse();
mouse.open();
String result = mouse.close();
System.out.println("result = " + result);
}
}
结果
2,默认方法
1.格式:
public default 返回值类型 方法名(形参){
方法体
return 结果
}
2.使用:
a.定义实现类,实现接口
b.默认方法可重写,可不重写
c.创建实现类对象,调用默认方法
如法炮制
首先不重写的
public interface USB {
public default void methodDef(){
System.out.println("我是默认方法");
}
}
public class Mouse implements USB {
}
public class test {
public static void main(String[] args) {
Mouse mouse = new Mouse();
mouse.methodDef();
}
}
结果
实现类是空的不舒服,那么重写一下
报错了,因为default只能出现在接口中,不能用在这里
去掉后,那么他还是重写吗
是,证明default的特殊性
并且在实现类中重写方法会改变结果
3.静态方法
1.定义格式:
public static 返回值类型 方法名(形参){
方法体
return 结果
}
2.使用:
接口名直接调用
在默认方法中说明
USB接口中
public interface USB {
//默认方法
public default void methodDef(){
System.out.println("我是默认方法");
}
//静态方法
public static void methodSta(){
System.out.println("我是接口中的静态方法");
}
}
测试类
public class test {
public static void main(String[] args) {
Mouse mouse = new Mouse();
mouse.methodDef();
System.out.println("==================");
USB.methodSta();
}
}
结果
静态方法简单快速
> 默认方法和静态方法在开发中 -> 可以作为临时加的一个小功能来使用