什么是接口
接口是一组行为的规范,从语法的角度看像是一种特殊的抽象类。
接口是一种标准,代表某种能力,通常用来约束其实现类应具备的功能。
接口的定义
使用interface关键字定义接口:
语法:interface 接口名 {}
interface MyInterface {
}
接口的方法和属性的特点
- 接口中的属性都是公开静态常量,隐式使用public static final 来修饰。
- 在jdk1.8之前接口中的方法都是公开抽象方法,隐式使用public abstract 修饰
// 定义接口
public interface Swimming {
// 定义属性
public static final int a = 20;
// 即使省略也会隐式使用public static final来修饰
int b = 10;
// 定义抽象方法
public abstract void youyong();
// 隐式使用public abstract来修饰
void youyong2();
}
- 在jdk1.8及之后,可以在接口中定义默认方法和静态方法!
// 定义接口
public interface Run {
// 定义抽象方法
public abstract void work();
// jdk1.8之后可以定义静态方法和默认方法
// 静态方法:
public static void runAway() {
System.out.println("我是接口中的静态方法");
}
// 默认方法 使用default修饰
default void escape() {
System.out.println("我是接口中的默认方法");
}
}
接口与抽象类的区别
抽象类 | 接口 | |
---|---|---|
关键字 | abstract class | interface |
属性 | 无要求 | 公开静态常量 |
方法 | 抽象方法、非抽象方法 | 抽象方法(jdk1.8之后可以定义默认方法和静态方法) |
构造方法 | 有 | 无 |
继承模式 | 单继承 | 接口之间允许多继承 |
接口之间的多继承
使用extends关键字 继承其他接口;多个接口使用","号分隔
public interface Motion extends Run, Swimming {
// 接口与接口允许多继承
// 通过反编译工具可以看到这个接口中只有一个抽象方法
// 但是它的实现类必须要实现它与它父接口的所有抽象方法!
// 在接口中,这种写法,会默认为是public abstract void yundong();
void yundong();
}
接口的实现
- 使用implements关键字实现接口,多个接口使用","号分隔。
// 实现接口用implements关键字,可以多实现
public class Student implements Run, Swimming{
// 必须实现接口中的所有抽象方法!
@Override
public void youyong() {
System.out.println("使用狗刨式游泳");
}
@Override
public void work() {
System.out.println("走六亲不认的步伐");
}
}
- 如果实现类没有实现接口中的所有抽象方法,那么该实现类将成为抽象类。
//实现接口用implements关键字,可以多实现
public abstract class Student implements Run, Swimming{
// 必须实现接口中的所有抽象方法!否则将自身定义为抽象类!
@Override
public void youyong() {
System.out.println("使用狗刨式游泳");
}
// @Override
// public void work() {
// System.out.println("走六亲不认的步伐");
// }
}
接口的多态
声明一个接口,实例化它的实现类
public class DemoInterface {
public static void main(String[] args) {
// 接口多态,声明接口类型,实例化实现类对象
Run student1 = new Student();
// 接口中的默认方法 使用default修饰的方法
student1.escape();
// 接口中的抽象方法
student1.work();
// 调用接口中的静态方法
Run.runAway();
// 接口多态,多态时不能调用子类独有的方法和属性
Swimming student2 = new Student();
// 接口中的抽象方法
student2.youyong();
// student2.work(); 无法调用子类独有的方法
// 实例化实现类对象
Student student3 = new Student();
// 方法调用
student3.escape();
student3.work();
student3.youyong();
}
}
关于接口的初步学习总结就到这里啦。