接口基本语法要点
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后:接口中可以有静态方法,普通方法,不过普通方法要用default修饰
- jdk 1.9后::接口中可以有 private 方法
一只大一牛马,水平有限,博客主要用来复习,以上知识有错的话,欢迎评论区鞭打我