接口基本语法要点
1. 接口中的方法默认为 public 的 抽象方法
interface Test {
//void func1 默认是 public abstract void func1
//public abstract 写上也可以,不过我建议省略
void func1();
}
2. 接口中的属性只能是 public final static,并且默认也是public final static
interface Test {
//int a 默认是 public static final a
//public static final 写上也可以
int a = 0;
}
3. 接口与接口间可以多继承
interface U1 {
void func1();
}
interface U2 {
void func3();
}
interface U3 extends U1, U2 {
void func3();
}
这个U3就相当于
interface U3 {
void func1();
void func3();
void func3();
}
4. 一个类可以实现多个接口
interface U1 {
void func1();
}
interface U2 {
void func2();
}
class Test implements U1,U2 {
@Override
void func1()
{
System.out.println("重写func1")
}
@Override
void func2()
{
System.out.println("重写func2")
}
}
5.接口可以实现多态
public class Main {
public static void main(String[] args) {
Test1 test1 = new Test1();
Test2 test2 = new Test2();
Use u = new Use();
u.work(test1);
u.work(test2);
}
}
public class Test1 implements U1{
@Override
public void func() {
System.out.println("调用 Test1 的 func1");
}
}
public class Test2 implements U1{
@Override
public void func() {
System.out.println("调用 Test2 的 func1");
}
}
public interface U1 {
void func();
}
public class Use {
public void work(U1 use) {
use.func();
}
}
创建一个U1接口,再创建两个Test类,分别实现U1接口,再创建一个Use类用于实现多态,然后在主函数创建好 Test1 和 Test2 对象,还有 Use 的对象。然后调用 Use 中的 work 方法,把 t1 传进去 相当于 U1 use = test1 , use.func()。可以看到这里 编译类型是 U1 然后 运行类型 是 test1, 触发 动态绑定机制 执行test1 的 func();然后在把 test2 传进去 相当于 U1 use = test2,use.func()。和上面一样的步骤触发动态绑定机制,找的是 test2 的 func()
个人觉得接口要注意的点
1. 普通类实现了接口,必须重写接口中所有的抽象方法,因为这是抽象方法的特点
2. 接口不能实例化
3. 接口的修饰符只能是 public(public interface …) 或者 默认(interface…)
接口版本之间的不同
- jdk 1.7之前:接口中所有方法都必须是抽象方法 ( 抽象方法没有方法体 )
- jdk 1.8后:java 8 及之后,接口中运行出现默认方法(要加 defalut)和静态方法 (只能通过该接口名调用)【接口也可以作为工具使用】
- jdk 1.9后::- jdk9 之后允许接口中定义私有的实例方法(给默认方法调用的)和私有的静态方法(为静态方法服务的)
总结
接口 + 多态可以让两个模块松耦合
- 接口 在 java 中表示一种规范,定义了一组抽象方法,和常量。只能定义抽象方法 (abstract 可以省略),常量(static final 可以省略)
- 接口中所有的方法和变量都是 public 修饰的
- 接口和类一样,也是一种引用数据类型 (接口类型 a = null),接口也是生成 xxx.class 文件
- 接口和接口之间可以多继承
- 非抽象类实现接口,必须实现接口中所有抽象方法
- 一个类可以实现多个接口 ( class 类 implements 接口 A, 接口 B )
- 所有接口也是继承 Object ,因此可以调用 object 的相关方法
- java 8 及之后,接口中运行出现默认方法(要加 defalut)和静态方法 (只能通过该接口名调用)【接口也可以作为工具使用】
- jdk9 之后允许接口中定义私有的实例方法(给默认方法调用的)和私有的静态方法(为静态方法服务的)
一只大一牛马,水平有限,博客主要用来复习,以上知识有错的话,欢迎评论区鞭打我