目录
目录
接口在一定程度上实现代码解耦[即:接口规范性+动态绑定机制]
3.如果一个类实现某个接口A,但该接口继承了接口B,那么该类需要实现接口B
概念:
接口就是给出一些没有是实现的方法,封装到一起,到某个类要使用的时候,再根据情况把这些方法写出来。
语法:
interface 接口名 {
//属性
//方法
}
class 类名 implements 接口 {
自己属性
自己方法
必须实现的接口的抽象方法
}
注意:
1.在jdk7.0前接口里的所有方法都没有方法体
2.jdk8.0后接口类可以有静态方法,默认方法,也就是说接口中可以有方法的具体实现
引入案例:
手机相接可以通过电脑传入数据,请用代码实现。
UsbInterface接口
public interface UsbInterface {
public void start();
public void stop();
}
Computer类
public class Computer {
//编写一个方法,计算机工作
public void work(UsbInterface usbInterface) {
//通过接口,来调用方法
usbInterface.start();
usbInterface.stop();
}
}
Phone类
public class Phone implements UsbInterface {
@Override
public void start() {
System.out.println("手机开始工作...");
}
@Override
public void stop() {
System.out.println("手机停止工作......");
}
}
Camera类
public class Camera implements UsbInterface {//实现接口,本质就是把接口方法实现
@Override
public void start() {
System.out.println("相机开始工作...");
}
@Override
public void stop() {
System.out.println("相机停止工作......");
}
}
测试类
public class Interface01 {
public static void main(String[] args) {
//创建手机,相机对象
Camera camera = new Camera();
Phone phone = new Phone();
//创建计算机
Computer computer = new Computer();
computer.work(phone);//把手机接入到计算机
System.out.println("===================");
computer.work(camera);//把相机接入到计算机
}
}
细节(复习必看):
1.接口不能被实例化
2.接口中所有的方法是public方法,接口中抽象方法,可以不用abstract修饰
3.一个普通类实现接口,就必须将该接口的所有方法都实现
4.抽象类实现接口,可以不用实现接口的方法
5.一个类可以同时实现多个接口
6.接口中的属性,只能是final的,而且是public static final 修饰符
7.接口中属性的访问形式:接口名.属性名(本来就是静态的)
8.一个接口不能继承其他的类,但是可以继承多个别的接口
9.接口的修饰符只能是public和默认,这点和类的修饰符是一样的
接口与继承的比较:
接口和集成解决的问题不同
继承的价值主要在于:解决代码的复用行和可维护性
接口的价值主要在于:设计,设计好各种规范(方法),让其他类去实现这些方法,即更加灵活
接口比继承更加灵活
继承是is-a关系,而接口时like-a的关系
接口在一定程度上实现代码解耦[即:接口规范性+动态绑定机制]
接口的多态:
多态参数
多态数组
这个和继承时那个多态数组用法一样
UsbInterface[] usbInterfaces = new UsbInterface[20];
usbInterfaces[0] = new Phone();
3.如果一个类实现某个接口A,但该接口继承了接口B,那么该类需要实现接口B
public class InterfacePolyPass {
public static void main(String[] args) {
IG ig = new Teacher();
IH ih = new Teacher();
}
}
interface IH {
void ih();
}
interface IG extends IH { }
class Teacher implements IG {
@Override
public void ih() {
}
}
一个不常见的题目:
早上刷题遇到了一个有意思的题,想要分享一下,
interface IA {
static void method();
}
觉得这个正确吗?
答案是错误的。
接口中static修饰的方法必须有方法体。