java第七篇:Java接口

张开发
2026/4/10 1:35:34 15 分钟阅读

分享文章

java第七篇:Java接口
文章目录前言:引入:一、什么是接口what接口的实现二、接口的好处(why)三、如何实现接口(how)多学亿招1.jdk8后接口新增加的三种方式2. 接口可以多实现一个类实现多个接口3.接口不能被实例化与抽象类相同4.方法冲突5. 接口多继承一个接口继承多个接口总结前言:今天我们来学习接口,并对比接口与抽象类的区别。引入:今天小明和朋友去一家新餐厅吃饭。小明掏出手机说“扫码点餐快”朋友却摆手“别折腾让服务员点吧。”另一个人嘀咕“我直接打电话点餐就行。”乐锅一看这个场景,兴奋地对new出来的对象说:这不就是接口嘛对象问什么是接口在这个场景中餐厅的点餐方案就是一种接口———“点餐方式”是一个行为契约而非具体实现。餐厅的系统代码只需定义“点餐”接口具体实现扫码/服务员/电话由不同类完成。一、什么是接口what在Java中接口Interface是一种引用数据类型类似于类然而它只能包含常量、方法签名和嵌套类型。接口不能包含实例变量或方法的实现在Java 8及之后的版本可以在接口中定义默认方法和静态方法。接口主要用于定义类的外部行为并允许类实现这些行为。接口的定义:用interface关键字实现public interface Animal { // 常量 int a 4; // 默认有修饰符 public static final static final String b我是帅哥; // 抽象方法 void go();// 默认有修饰符 public abstract void out(String food);// 默认有修饰符 public abstract接口的实现一个类通过 implements 关键字来实现接口并提供接口中所有抽象方法的具体实现。例如//实现类可以多个接口,要么重写方法,要么定义抽象类 class B implements A { Override public void go() { System.out.println(狗跑的快); } Override public void out() { } }public class test { public static void main(String[] args) { System.out.println(Animal.b);//输出:我是帅哥 //实现类可以创建对象 B b new B(); b.go();//输出:狗跑的快 } }注意接口不能创建对象二、接口的好处(why)弥补了单继承的不足,一个类同时可以实现多个接口,使类的角色更多,功能更强大。让程序可以面向接口编程,这样程序员可以灵活方便的切换各种业务实现(更利于程序的解耦合)人话版这就像你本职是会计但公司同时要求你会开车、懂外语、能操作办公软件。你不用换父类继承只需报几个培训班实现接口就能身兼数职能力值拉满人话版公司让你对接物流顺丰、京东、菜鸟随便选。你只需认准“发货单模板”接口不管换哪家快递填同样的单子就能寄件。老板切换合作方时你照样摸鱼代码几乎不用改三、如何实现接口(how)前面我们已经写过了接口的格式,下面我们来实现接口对于我们引入环境时提到的餐厅点餐具体实现// 接口定义点餐行为契约不能实例化 public interface OrderMethod { // 抽象方法所有实现类必须实现 void placeOrder(String item); // “点餐”行为具体方式由实现类定 // 默认方法通用逻辑 default void confirmOrder() { System.out.println(订单已确认); // 所有方式通用 } }// 三种不同的方式 // 扫码点餐实现接口 public class QRCodeOrdering implements OrderMethod { Override public void placeOrder(String item) { System.out.println(扫码点餐 item 已提交); } } // 服务员点餐实现接口 public class WaiterOrdering implements OrderMethod { Override public void placeOrder(String item) { System.out.println(服务员点餐 item 已记录); } } // 电话点餐实现接口 public class PhoneOrdering implements OrderMethod { Override public void placeOrder(String item) { System.out.println(电话点餐 item 已拨号); } }// 餐厅系统统一处理所有点餐方式 public class RestaurantSystem { public static void main(String[] args) { // 1. 扫码点餐 OrderMethod qrOrder new QRCodeOrdering();//多态 qrOrder.placeOrder(宫保鸡丁); qrOrder.confirmOrder(); // 调用默认方法 // 2. 服务员点餐 OrderMethod waiterOrder new WaiterOrdering();//多态 waiterOrder.placeOrder(麻婆豆腐); waiterOrder.confirmOrder(); // 3. 电话点餐 OrderMethod phoneOrder new PhoneOrdering();//多态 phoneOrder.placeOrder(鱼香肉丝); phoneOrder.confirmOrder(); } }关键类比———无论如何点餐我都能吃上饭。生活场景Java 代码餐厅的点餐规则interface OrderMethod扫码点餐class QRCodeOrdering implements OrderMethod服务员点餐class WaiterOrdering implements OrderMethod电话点餐class PhoneOrdering implements OrderMethod多学亿招1.jdk8后接口新增加的三种方式public interface MyInterface { //1.默认方法(实例方法):使用default修饰,默认会加上public修饰 default void test1() { System.out.println(默认方法实现); } //类方法(静态方法):使用static修饰,默认加上public static void test2() { System.out.println(静态方法实现); } //私有方法(private)-jdk 9 private void test3() { System.out.println(私有方法实现); } }为什么加提高接口能力便于项目扩展和维护。2. 接口可以多实现一个类实现多个接口为什么重要接口是行为契约一个类可以同时满足多种行为如“点餐”“支付”而抽象类只能单继承。生活类比你点餐时扫码点餐OrderingMethod同时需要支付PaymentMethod——就像你用手机点餐时既要提交订单又要支付。餐厅系统class QRCodeOrdering implements OrderingMethod, PaymentMethod// 接口1点餐行为 public interface OrderingMethod { void placeOrder(String item); } // 接口2支付行为 public interface PaymentMethod { void pay(double amount); } // 实现类同时满足点餐和支付 public class QRCodeOrdering implements OrderingMethod, PaymentMethod { Override public void placeOrder(String item) { System.out.println(扫码点餐 item); } Override public void pay(double amount) { System.out.println(扫码支付 amount 元); } }关键优势“一个类可以同时拥有多种能力”→ 比抽象类的单继承灵活百倍3.接口不能被实例化与抽象类相同为什么接口是行为契约不是具体实现。就像餐厅的“点餐规则”不能直接点餐必须由扫码/服务员等实现public interface A { } public class Main { public static void main(String[] args) { A order new A(); // ❌ 编译错误接口不能实例化 } }4.方法冲突如果多个接口中定义了同名的方法且没有默认实现类必须提供具体实现。例如// 接口1点餐确认规则 public interface OrderingMethod { void confirmOrder(); // 无默认实现 } // 接口2退款确认规则 public interface RefundMethod { void confirmOrder(); // 无默认实现 } // 实现类必须提供具体实现解决冲突 public class QRCodeOrdering implements OrderingMethod, RefundMethod { Override public void confirmOrder() { System.out.println( 扫码点餐退款双重确认); // 类提供唯一实现解决两个接口的冲突 } }5. 接口多继承一个接口继承多个接口场景餐厅推出“点餐退款”综合规则OrderingMethod点餐规则RefundMethod退款规则OrderingRefundMethod继承两者的新规则// 接口1点餐规则 public interface OrderingMethod { void placeOrder(String item); } // 接口2退款规则 public interface RefundMethod { void refund(String orderID); } // 接口3继承两个接口多继承 public interface OrderingRefundMethod extends OrderingMethod, RefundMethod { // 无需重写方法自动继承 void specialConfirm(); // 新增方法 }6.接口和抽象类的区别:特性接口Java 8抽象类胡辣汤版状态字段不能有实例变量无状态可有字段汤的温度、浓度默认方法default方法通用逻辑无需子类实现继承关系多实现一个类可实现多个接口❌单继承只能继承一个抽象类设计意图“能做”如Runnable“是”如Dog is-a Animal一句话总结“接口是行为契约抽象类是状态模板。”点餐方式接口只定义“能点餐”不关心“怎么点”。胡辣汤底抽象类定义“汤底是什么”包含“煮底料”步骤。总结今天我们学习了接口的相关知识。本次分享到此结束感谢大家的观看与支持如果本内容对您有帮助欢迎点赞、收藏您的支持将是我持续创作的最大动力谢谢

更多文章