第十节 接口
什么是接口
接口的语法
接口相当于特殊的抽象类,定义方式,组成部分与抽象类类似
没有构造方法,不能创建对象
只能定义公开静态常量和公开抽象方法
属性前面的 public static final写不写都默认存在。这里的属性只能显式初始化,因为接口中只有公开静态常量和公开抽象方法,没有其他内容,所以只能在初始化时赋值。
方法前面的public abstract写不写都存在,用abstract修饰,所以方法没有方法体,只能让接口的实现类重写此方法。
interface myInterface{
public static final String field="value";
//field="value1";接口中的方法不能二次赋值。
public abstract void method();
}
概念
微观概念:接口是一种能力和约定
接口的定义:代表了某种能力
方法的定义:能力的具体要求
经验:
java为单继承,当父类的方法种类无法满足子类需求时,可实现接口扩充子类能力
接口支持多实现,可为类扩充多种能力
接口与类的异同
与抽象类的异同
相同:
可编译成字节码文件,接口也可以编译成字节码文件
不能创建对象,因为没有构造方法
可作为引用类型,对象名代表地址
接口的实现类具备Object类中所定义的方法
不同:
所有属性都是公开静态常量,隐式使用public static final修饰
所有方法都是公开抽象方法,隐式使用public abstract 修饰
没有构造方法 动态代码块 静态代码块只有公开静态常量和公开抽象方法
原因:
接口中定义的属性必须是public static final修饰,而且这三个修饰符的顺序可以随意
public 公共的,是一种标准,
static 接口中无法直接创建对象,所有必须是static修饰,才能让其他对象直接通过接口本身访问
final 接口中没有构造方法,没有代码块,所以只能在声明的时候为属性赋值
接口中的方法必须是public abstract修饰
定义接口可以不必考虑他将来的具体实现,还需要提供一个基本的框架即可
接口中不能继承Object类,
接口和类是并列关系,
object中的方法已经被实现,假如接口可以继承object类,那么object的所有方法将被接口继承过来,那么就不符合接口中不能有方法实现的原则。
接口的引用
接口的规范
任何类在实现接口时,必须实现接口中所有的抽象方法,否则此类为抽象类。
实现接口中的抽象方法时,访问修饰符必须是public。
接口引用
同父类一样,接口也可声明为引用,并指向实现类对象
注意:
仅可调用接口中所声明的方法,不可调用实现类中独有的方法
可强转回实现类本身类型,进行独有方法的调用
接口的多态
多种不同类型的引用指向同一个对象时,表示看待对象的视角不同
不同引用所能看到的对象的范围不同,只能调用自身类型中所声明的部分
不同引用类型,仅可调用自身类型中所声明的方法
public class MyInterface {
public static final int num=10;
public static void main(String[] args) {
//多种不同类型的引用指向同一个对象时,表示看待对象的视角不同
Dog myDog=new Dog();//把狗当狗看
Animal a=myDog;//向上转型,装箱,把狗当动物看
Runable r=myDog;//将狗当做会跑的东西看
Swimmable s=myDog;//将狗当做会游的东西看,
//不同引用所能看到的对象范围不同,只能调用自身类型中所声明的部分
}
}
interface Runable{
public abstract void run();
}
interface Swimmable{
void swim();
}
abstract class Animal{
public void eat() {}
public void sleep() {}
}
class Dog extends Animal implements Runable,Swimmable{
public void run() {
System.out.println("dog在跑");
}
public void swim() {
System.out.println("dog在游泳");
}
public void eat() {
System.out.println("dog在吃");
}
public void shout() {
System.out.println("dog在叫");
}
}
常见关系
1、类与类:
单继承,extends 父类名称/
2、类与接口:
多实现,
implements 接口名称1,接口名称2,接口名称n
3、接口与接口:
多继承
extends 父接口1,父接口2,父接口n
常量接口
概念
将多个常用于表示状态或固定值的变量,以静态常量的形式定义在接口中统一管理,提高代码的可读性
什么是接口
宏观概念:
接口是一种标准
接口的实现着 接口/标准 接口的使用者
U盘 usb 笔记本电脑上的用的usb接口
usb风扇
手机充电器
接口回调
接口回调:
先有接口的使用者,后有接口的实现者
4:程序员
工具的调用者
3:程序员
接口的实现着
2:工具
接口的使用者
1:接口
标准
接口的好处
程序的耦合度降低
更自然的使用多态
设计与实现完全分离
更容易搭建程序框架
更容易更换具体实现
总结
什么是接口
微观:接口是一种能力和约定
宏观:接口是一种标准
接口与类的异同
没有构造方法,仅可定义公开静态常量和公开抽象方法
接口的应用
java为单继承,当父类提供的方法无法满足子类需求时,可实现接口扩充子类能力
接口规范
任何类在实现接口时:必须实现接口中所有的抽象方法,否则此类为抽象类
实现接口中的抽象方法时:访问修饰符必须是public
什么是常量接口
将多个常用于表示状态或固定值的变量,以静态常量的形式定义在接口中统一管理
什么是接口回调
现有接口的使用者,后有接口的实现者