什么是接口?
接口的由来:当一个抽象类中 所有的函数都是抽象的时候,那么我们就可以将这个抽象类
用另外一种表现形式-接口
对于接口中的函数 变量
所有的接口变量:
public static final xxx xxx;
所有的方法:
public abstract xxx xxx;
接口名.方法名来调用,)
final关键字
final修饰变量 该变量所存储的数据的地址不能被改变
final修饰函数 该函数不能被重写
final修饰类 该类不能被继承
类与接口的关系
类与类之间是什么关系
单继承 一个类只能且只有一个父类接口与类之间是什么关系
实现关系
一个类可以实现多个接口 implements
接口与接口之间是什么关系
不可能是实现关系implements
只能是继承关系-多继承为什么类与类之间不能多继承?
多继承 当函数名相同时,函数体不同时,调用函数会产生二义性(不知道调用哪个父类的函数)
为什么接口与接口之间可以多继承?
函数为抽象函数,无函数体,调用都为重写的函数
Interface关键字
interface 接口名{
静态 final 变量;
abstract 方法();
静态方法(){ //在子类中只能是通过接口调用(接口名.方法名();) 不会继承给子类
方法体;
}
}
implements关键字
class 类名 implements 接口名1,接口名2{//可继承多个接口
}
当一个类想要实现一个接口的时候 有两个选择
1.重写接口中的函数
2.该类定义成抽象即可
- 第一个作用:在后期对类的功能进行扩展,这些功能并不是该类原先所具有的功能!
- 第二个作用:向外提供统一的规范,接口的出现 一定程度上对我们的代码设计进行了解耦,耦合性-两者之间的联系
- 第三个作用:传递代码 和第二个很像 //匿名实现子类的匿名对象//避免了在编译期间所生成的大量备选的类字节码//在程序运行期间 需要用到了 再去创建实现子类和其对象即可
匿名实现子类对象代码:
方法(new 接口名(){
重写方法(){
方法体;
}
});
//就相当于把/*class 类名 implements 接口名*/将类的名匿了
Java当中最常用的三个内置的接口
Comparable 比较接口 给我们的类提供比较的功能
Iterable 可迭代接口 可以将我们该类的对象用于foreach循环
Serializable 序列化接口 我们可以将该对象的数据写出去
对象的数据在内存中 如何将内存中的数据写出去(硬盘 网络)
想要把内存中的数据提取 就得实现序列化接口(序列化就是将数据转为二进制的过程)