接口的基础语法
1 接口概述
接口也是一种引用数据类型。编译之后也是一个class字节码文件。
接口我们可以看作是抽象类的一种特殊情况,在接口只能定义抽象的方法和常量。
- 在Java中接口采用interface声明
- 接口的默认方法都是public abstract的,不能修改,可以省略
- 接口中的变量默认都是public static final类型的,不能更改(可以省略),所以必须显示的初始化
- 接口不能被实例化,接口中没有构造函数的概念
- 接口之间可以继承,但接口之间不能实现
- 接口中的方法只能通过类来实现,通过implements关键字
- 如果一个类实现了接口,那么接口中所有的方法必须实现
- 一个类可以实现多个接口
接口定义语法:
[修饰符列表] interface 接口名{}
2 接口中的方法默认都是public abstract的,不能更改,可以省略
interface MyTest1 {
//抽象方法
public abstract int test1();
//public abstract可以省略
String test2();
}
接口中都是抽象方法,自然也是不能带有方法体。
3 接口中的变量默认都是public static final类型的,不能更改(可以省略),所以必须显示的初始化
interface MyTest2 {
//接口中的常量必须是public static final 修饰的,不能更改
public static final double PI = 3.1415926;
//可以省略不写
int X = 100;
}
4 接口不能被实例化,接口中没有构造函数的概念
public class InfaceTest05 {
public static void main(String[] args) {
//这是错误的,接口是抽象类的一种特例,只能定义方法和bian'l,没有实现
//所以不能去实例化
//Student stu = new Student();
}
}
interface Student {
//接口是抽象类的一种,抽象类中的方法没有方法体,所以接口中也没有
//所以也就没有构造函数
public void addStudent(int id, String name);
}
5 接口之间可以继承,支持多继承
public class InterfaceTest01 {
}
//定义接口A
interface A {
}
//定义接口B,并继承接口A
interface B extends A {
}
//定义接口C,并继承接口A和接口B
interface C extends A, B {
}
6 接口中的方法只能通过类来实现,通过implements关键字
类和类之间叫做继承,类和接口之间叫做实现。
继承使用extends关键字完成。
实现用implements关键字完成。
//特殊的抽象类,完全抽象的,叫做接口
interface InterfaceTest02 {
}
//编写一个非抽象类
class Test implements InterfaceTest02{
}
7 如果一个类实现了接口,那么接口中所有的方法必须实现
interface InterfaceTest02 {
//定义两个抽象方法
int sum(int a, int b);
String sub(String c, String d);
}
//编写一个非抽象类
class Test implements InterfaceTest02 {
//必须重写/覆盖/实现 接口中的方法
public int sum(int a, int b) {
return a + b;
}
public String sub(String c, String d) {
return c + d;
}
}
8 一个类可以实现多个接口
//接口A1
interface A1 {
void m1();
}
//接口A2
interface A2 {
void m2();
}
//TestA实现接口A1,接口A2
class TestA implements A1, A2 {
//必须要覆盖两个接口中的方法
@Override
public void m1() {
}
@Override
public void m2() {
}
}
Java中类和类只支持单继承,而接口弥补了单继承带来的缺陷。