Java——接口
一、接口的概念接口一种标准、规范是接口的实现者和使用者都必须遵循的约定。举个例子USB接口就是一个标准U盘、鼠标、键盘都遵守这个标准电脑也通过这个标准来使用它们。接口的语法重点interface 接口名 { // 接口中的内容 }接口的特点编译后生成独立的.class文件不能创建对象但可以声明引用接口中的属性都是公开、静态、常量默认被public static final修饰接口中的方法都是公开、抽象方法默认被public abstract修饰没有构造方法接口不是类interface MyInterface { int NUM 100; // 等价于public static final int NUM 100; void method(); // 等价于public abstract void method(); }二、实现类重点接口不能直接使用需要有一个实现类来实现接口中的方法。语法class 类名 implements 接口名 { // 实现接口中的所有抽象方法 }实现类的要求如果实现类不想成为抽象类就必须实现覆盖接口中所有的方法实现接口中的方法时访问修饰符必须是public因为接口中的方法默认是public abstract子类不能降低访问权限完整示例// 接口 interface MyInter { int NUM 3; // public static final void m1(); // public abstract int m2(); // public abstract } // 实现类 class MyClass implements MyInter { Override public void m1() { System.out.println(m1的方法...); } Override public int m2() { System.out.println(m2的方法...); return 0; } } // 测试 public class TestInter { public static void main(String[] args) { // 接口引用指向实现类对象多态 MyInter mi new MyClass(); mi.m1(); // m1的方法... int n mi.m2(); // m2的方法... } }注意MyInter mi new MyClass()是多态的应用接口强制使用多态三、接口的继承性基础重点1. 接口之间的继承多继承一个接口可以有多个父接口interface A { void methodA(); } interface B { void methodB(); } // 多继承 interface C extends A, B { void methodC(); } // 实现类要实现所有接口中的方法 class MyClass implements C { Override public void methodA() { } Override public void methodB() { } Override public void methodC() { } }2. 类和接口之间多实现一个类可以同时实现多个接口interface USB { void connect(); } interface Bluetooth { void pair(); } // 多实现 class Mouse implements USB, Bluetooth { Override public void connect() { System.out.println(USB连接); } Override public void pair() { System.out.println(蓝牙配对); } }3. 继承父类的同时实现多个接口先继承后实现class Animal { String name; } interface Flyable { void fly(); } interface Swimmable { void swim(); } // 先继承后实现 class Duck extends Animal implements Flyable, Swimmable { Override public void fly() { System.out.println(鸭子飞); } Override public void swim() { System.out.println(鸭子游泳); } }语法顺序class 类名 extends 父类名 implements 接口1, 接口2四、接口的作用理解开发应用1. 扩充子类的能力由于Java是单继承子类只能有一个父类。当父类的功能不够用时可以通过接口来扩展能力。设计原则主要功能定义在父类中次要功能/扩展功能定义在接口中。// 主要功能在父类 class Person { String name; public void eat() { System.out.println(吃饭); } } // 扩展功能在接口 interface Singable { void sing(); } interface Danceable { void dance(); } // 通过接口扩展能力 class Star extends Person implements Singable, Danceable { Override public void sing() { System.out.println(唱歌); } Override public void dance() { System.out.println(跳舞); } }2. 降低程序中的耦合度接口定义好之后将接口的实现者和接口的使用者分离借助多态降低各模块之间的耦合度。耦合度模块之间的依赖程度。耦合度越低代码越灵活越容易维护。五、接口的回调理解接口回调接口定义之后先有接口的使用者再有接口的实现者。开发中遇到接口回调我们需要关注的是根据接口规范给出接口的实现部分。典型的例子按钮的点击事件监听器。// 接口定义 interface OnClickListener { void onClick(); } // 接口的使用者比如Button类 class Button { private OnClickListener listener; public void setOnClickListener(OnClickListener listener) { this.listener listener; } public void click() { if (listener ! null) { listener.onClick(); } } } // 接口的实现者我们写的代码 public class Main { public static void main(String[] args) { Button btn new Button(); btn.setOnClickListener(new OnClickListener() { Override public void onClick() { System.out.println(按钮被点击了); } }); btn.click(); } }六、接口和抽象类的区别面试重点对比项接口抽象类关键字interfaceabstract class属性公开、静态、常量public static final没有要求实例变量静态变量都可以方法公开、抽象方法public abstract抽象方法 非抽象方法都可以构造方法没有构造方法有构造方法继承关系多继承接口可以继承多个接口单继承类只能有一个父类实现关系类实现接口implements类继承抽象类extends简单总结抽象类是对事物的抽象is-a关系比如动物→狗接口是对能力的抽象can-do关系比如会飞的、会游泳的// 抽象类是一种 abstract class Animal { } // 接口能做什么 interface Flyable { } interface Swimmable { } // 子类继承一个父类实现多个接口 class Duck extends Animal implements Flyable, Swimmable { }七、我踩过的坑坑1实现接口方法时忘记写publicinterface MyInter { void method(); } class MyClass implements MyInter { void method() { } // ❌ 编译报错访问权限比接口中的低 }解决必须写成public void method()。坑2接口和抽象类选择混乱// 什么时候用接口什么时候用抽象类解决需要定义一种类型is-a关系→ 抽象类需要定义一种能力can-do关系→ 接口Java是单继承如果已经有父类还想扩展功能 → 接口坑3接口中定义了属性在实现类中直接修改interface MyInter { int NUM 100; // 默认是public static final是常量 } class MyClass implements MyInter { public void test() { NUM 200; // ❌ 编译报错final变量不能修改 } }解决记住接口中的属性是常量不能修改。八、小练习用接口实现一个简单的“USB设备”例子// USB接口标准 interface USB { void connect(); void disconnect(); } // 鼠标实现USB class Mouse implements USB { Override public void connect() { System.out.println(鼠标已连接); } Override public void disconnect() { System.out.println(鼠标已断开); } } // 键盘实现USB class Keyboard implements USB { Override public void connect() { System.out.println(键盘已连接); } Override public void disconnect() { System.out.println(键盘已断开); } } // 电脑使用USB设备接口的使用者 class Computer { public void useUSB(USB device) { // 多态参数 device.connect(); // 使用设备... device.disconnect(); } } // 测试 public class Test { public static void main(String[] args) { Computer computer new Computer(); computer.useUSB(new Mouse()); // 鼠标已连接 → 鼠标已断开 computer.useUSB(new Keyboard()); // 键盘已连接 → 键盘已断开 } }总结今天学的内容让我对接口有了深刻的理解概念要点接口的定义interface 接口名 { }接口的属性public static final即常量接口的方法public abstract即抽象方法实现类class 类 implements 接口必须实现所有方法多实现一个类可以实现多个接口多继承接口可以继承多个接口与抽象类区别接口是能力can-do抽象类是类型is-a面试高频题接口和抽象类的区别接口中的属性和方法默认的修饰符是什么一个类可以继承多个类吗可以实现多个接口吗为什么需要接口我接下来的任务把课堂上的接口案例都敲一遍比如USB接口、图形接口、回调接口等加上注释再做一些练习题巩固。如果你也在学Java欢迎一起交流我们明天继续