在介绍接口前先给大家讲一下什么是: final
final:
对成员属性声明 final 是一个最终的, 最后的,也是不可更改的
可以修饰:
-
可以修饰类
被final修饰的类称之为最终类, 不能被其它类继承(不能有子类)
-
可以修饰方法
被final修饰的方法称之为最终方法, 不能被子类重写/覆盖
-
可以修饰变量
被final修饰的变量称之为常量, 一旦确定值以后不能被修改
---- 常量只能被赋值一次、常量名称一般都会大写普通成员常量赋值方式:
- 直接显示赋值
- 构造方法赋值
- 动态代码块赋值
// 修饰类
final class A{
}
// 修饰方法
public final void test(){
}
// 修饰变量
public static final int MAX_NUM;
静态常量
将一个变量使用static final进行修饰, 称之为静态常量
- 值一旦确定不能被修改
- 调用时可以直接使用类名.静态变量名的方式
静态常量的赋值方式:
- 直接显式赋值
- 静态代码块中赋值
什么是接口
接口其实就是一种特殊的抽象类
抽象类中可以包含:
成员属性
成员方法
构造方法
抽象方法
接口中可以包含:
1. 抽象方法
2. 静态常量
接口是一种标准/规范
具体类: 对现实世界中某一种具体事物的抽象描述(特征, 行为)Person
抽象类: 对现实世界中相同类型的多种事物进行抽象描述
接口: 对现实世界中不同类型的多种事物进行抽象描述
接口只负责定义,而不负责具体的实现
接口中不能包含:
- 构造方法
- 成员方法
接口只能包含:
- 抽象方法
- 静态常量
如何定义一个接口, 这里需要用到关键字(interface)
interface 接口名称{
// 抽象方法
public abstract void test();
}
具体类实现接口:
需用到: implements
public class Test1 implements 接口名称{
}
如果一个具体类实现了指定的接口, 那么该具体类必须实现该接口中所有的抽象方法
如果只实现了其中一部分抽象方法, 那么该具体类必须声明抽像类
实现了指定接口的具体类可以称之为具体实现子类
与抽象类的区别:
相同点:
1. 可编译成为字节码文件
2. 不能被实例化
3. 可以作为引用类型(多态)
不同点:
1. 所有的属性都是: public static final 修饰
2. 所有的方法都是: public abstract 修饰
3. 没有构造方法, 静态代码块, 动态代码块
其它特点:
1. Java语言只能实现单继承, 但可以实现多个接口
class 类名 extends 父类名 implements 接口名1, ... 接口名N{
}
2. 接口可以继承接口, 而且可以继承多个接口
3. 接口不能实现其它接口
常量接口
在一个接口中只定义静态常量
方便统一管理, 提高代码的可读性
// 常量接口
interface Contants{
// qq状态
public static final int LINE = 100; //在线
public static final int HIDE = 200; // 隐身
public static final int NLINE = 300; // 离线
public static final int WORK = 400; // 忙碌
public static final int OUT = 500; // 离开
}
接口回调
直接调用接口中的相应方法(使用多态的方式来调用)
public class Demo{
public static void main(String[] args){
// 这里就是多态
Usb mouse = new Mouse();
Usb keyboard = new Keyboard();
Computer c = new Computer();
c.on(mouse);
c.on(keyboard);
}
}
interface Usb{
public abstract void service();
}
class Mouse implements Usb{
public void service(){
System.out.println("鼠标");
}
}
class Keyboard implements Usb{
public void service(){
System.out.println("键盘");
}
}
/*class Computer{
private Usb usb;
public Computer(){}
public Computer(Usb usb){
this.usb = usb;
}
public void on(){
usb.service();
}
}*/
class Computer{
public void on(Usb usb){
usb.service();
}
}
最后终结:
- 接口中只能包含: 抽象方法与静态常量
- 接口可以继承其它接口且可以继承多个接口
- 接口不能实现其它接口
- 具体实现子类使用implements关键字实现指定的接口, 且可以实现多个接口
- 具体实现子类必须重写/覆盖接口中所有的抽象方法
– 如果没有全部重写/覆盖的话, 那么该实现子类必须声明为抽象类