接口
938字约3分钟
2025-09-23
接口
接口
public interface UsbInterface { // 在接口中可以省略 abstract 抽象类 public void start(); public void stop(); // 一般情况下抽象类中的方法是没有方法体的 // 但是有个特殊情况可以使用方法体 // 接口里可以使用的方法体有两种 // default 表默认方法 public default void b() { System.out.println("hello"); } // 静态方法 public static void e() { System.out.println("hello"); } }
手机(手机调用接口)
public class Phone implements UsbInterface { public void start() { System.out.println("手机开始工作。。。"); } public void stop() { System.out.println("手机停止工作。。。"); } }
相机(相机调用接口)
public class Camera implements UsbInterface { public void start() { System.out.println("相机开始工作。。。"); } public void stop() { System.out.println("相机停止工作。。。"); } }
电脑(电脑使用接口)
public class Computer { // 利用向上转型调用所以UsbInterface的子类 // 也利用到了动态绑定机制,优先使用子类中的方法 public void usbInterface(UsbInterface usbInterface) { usbInterface.start(); usbInterface.stop(); } }
运行(使用电脑)
public class Run { public static void main(String[] args) { new Computer().usbInterface(new Phone()); System.out.println("================"); new Computer().usbInterface(new Camera()); } }
接口细节
接口不能被创建对象
接口中的所有方法默认都是公开的抽象类,也就是你一个方法即使不写
public
和abstract
,那么该方法也表示的是一个公开的抽象类public interface UsbInterface { // 可以不用写public和abstract修饰符 void start(); void stop(); }
接口中的属性默认是公开静态的常量,所以可以不用写
public
,static
,final
之类的修饰符,接口中的属性的访问形式是:接口名.属性名
public class CeShi01 { public static void main(String[] args) { System.out.println(UsbInterface.a); } } interface UsbInterface { // 可以不用写public,static,final修饰符 // 因为默认是常量,所以默认要被初始化 int a = 10; }
接口和抽象类一样,如果你要调用接口,那么你就要实现该接口的所有抽象方法
如果调用类为抽象类则可以不用实现接口中的抽象方法
public interface UsbInterface { void start(); void stop(); } abstract class A implements UsbInterface { }
一个类可以实现多个接口
interface IA { void in(); } interface IB { void id(); } /* * 一个类可以实现多个接口,每个接口中的所有抽象方法都要实现 * */ class E implements IA,IB { public void in() { } public void id() { } }
接口不能继承别的类,只能继承别的接口,而且可以继承多个接口
interface IA { int a = 10; void in(); } interface IB { void id(); } interface IC extends IA,IB {} // 一个类调用一个接口,但那个接口又继承了多个接口 // 那么该类不但要实现调用接口的抽象类,还要实现调用接口继承的接口中的抽象类 // 接口里面的属性可以不用去实现 class E implements IC { public void in() { } public void id() { } }
private
、final
和static
修饰符不能用来修饰抽象方法(注意不是属性),因为这些关键字都是和重写相违背的
接口和继承
因为Java是单继承机制,所以接口就相当于是继承的扩展(一个类只能继承一个父类,但是可以实现多个接口)
// 一个类只能继承一个父类,但是可以实现多个接口 // 因为Java是单继承机制,所以接口就是为了弥补这个缺点的 // 可以理解为接口就是继承的补充 class Monkey extends Born implements Acquired01,Acquired02 { public Monkey(String name) { super(name); } }
接口与多态
接口的多态和类的多态是一样的