当前位置: 首页 > news >正文

Java基础 8.18

1.接口注意事项和细节

  1. 接口不能被实例化
  2. 接口中所有的方法是public方法,接口中抽象方法,可以不用abstract修饰
  3. 一个普通类实现接口,就必须将该接口的所有方法都实现(快捷键alt+enter)
  4. 抽象类实现接口,可以不用实现接口的方法
  5. 一个类同时可以实现多个接口
  6. 接口中的属性,只能是final的,而且是 public static final 修饰符 比如:int a=1; 实际上是 public static final int a=1;(必须初始化)
  7. 接口中属性的访问形式:接口名.属性名
  8. 接口不能继承其它的类,但是可以继承多个别的接口

2.接口和类继承之间的比较

package com.logic.interface_;public class ExtendsVsInterface {public static void main(String[] args) {LittleMonkey littleMonkey = new LittleMonkey("wukong");littleMonkey.climbing();littleMonkey.swimming();littleMonkey.flying();}
}interface Fish {void swimming();
}interface Bird {void flying();
}class Monkey {private String name;public Monkey(String name) {this.name = name;}public void climbing() {System.out.println("猴子会爬树...");}public String getName() {return name;}public void setName(String name) {this.name = name;}
}class LittleMonkey extends Monkey implements Fish, Bird {public LittleMonkey(String name) {super(name);}@Overridepublic void swimming() {System.out.println(getName() + "通过学习在游泳...");}@Overridepublic void flying() {System.out.println(getName() + "通过学习在飞翔...");}
}

接口和继承解决的问题不同

继承的价值主要在于:解决代码的复用性可维护性

接口的价值主要在于:设计,设计好各种规范(方法),让其它类去实现这些方法

接口比继承更加灵活

接口比继承更加灵活,继承是满足is-a的关系,而接口只需满足like-a的关系

接口在一定程度上实现代码解耦(接口规范性+动态绑定机制)

3.接口的多态

多态参数(前面案例体现)

在前面的Usb接口案例,UsbInterface usb,既可以接收手机对象,又可以接收相机对象,就体现了 接口 多态(接口引用可以指向实现了接口的类的对象)

多态数组

演示一个案例:给Usb数组中,存放Phone和相机对象,Phone类还有一个特有的方法cal,请遍历Usb数组,如果是Phone对象,除了调用Usb 接口定义的方法外,还需要调用Phone 特有方法call

package com.logic.interface_;public class InterfacePolyArr {public static void main(String[] args) {//多态数组 -> 接口类型数组Usb[] usbs = new Usb[2];usbs[0] = new Phone_();usbs[1] = new Camera_();/*给Usb数组中,存放 Phone  和  相机对象,Phone类还有一个特有的方法call(),请遍历Usb数组,如果是Phone对象,除了调用Usb 接口定义的方法外,还需要调用Phone 特有方法 call*/for (int i = 0; i < usbs.length; i++) {usbs[i].work();//动态绑定..//和前面一样,我们仍然需要进行类型的向下转型if (usbs[i] instanceof Phone_) {//判断他的运行类型是 Phone_((Phone_) usbs[i]).call();}}}
}interface Usb {void work();
}class Phone_ implements Usb {public void call() {System.out.println("手机可以打电话...");}@Overridepublic void work() {System.out.println("手机工作中...");}
}class Camera_ implements Usb {@Overridepublic void work() {System.out.println("相机工作中...");}
}

接口存在多态传递现象

package com.logic.interface_;/*** 演示多态传递现象*/
public class InterfacePolyPass {public static void main(String[] args) {//接口类型的变量可以指向,实现了该接口的类的对象实例IG ig = new Teacher();//如果IG 继承了 IH 接口,而Teacher 类实现了 IG接口//那么,实际上就相当于 Teacher 类也实现了 IH接口.//这就是所谓的 接口多态传递现象.IH ih = new Teacher();}
}interface IH {void hi();
}interface IG extends IH {
}class Teacher implements IG {@Overridepublic void hi() {}
}

http://www.dtcms.com/a/338036.html

相关文章:

  • lamp架构部署wordpress
  • 在开发后端API的时候,哪些中间件比较实用
  • Less( 预处理语言)的使用方法
  • 什么叫做 “可迭代的产品矩阵”?如何落地?​
  • 【C/C++】For 循环展开与性能优化【附代码讲解】
  • bun + vite7 的结合,孕育的 Robot Admin 【靓仔出道】(十三)
  • 如何在泛微 OA 中实现流程编号的标准化配置
  • 工程项目管理软件:项目总超预算?进度总滞后?企智汇工程项目管理软件一招打通业主、合同、分包全流程,效率翻倍!实操指南!
  • Ultimate-Python-de-Cero-a- Experto-Un-Lib-Nicolas-Schurmann-翻译版
  • 构建时序感知的智能RAG系统:让AI自动处理动态数据并实时更新知识库
  • 线程安全 -- 2
  • 单片机驱动LCD显示模块LM6029BCW
  • 实践笔记-小端模式下的寄存器数据输入技巧;图形化界面配置注意事项。
  • 实现自己的AI视频监控系统
  • PostgreSQL Certified Master 专访 | 第三期 李洋
  • ADC的实现(单通道,多通道,DMA)
  • Python pyzmq 库详解:从入门到高性能分布式通信
  • 学习嵌入式的第二十天——数据结构
  • 【前端面试题】JavaScript 核心知识点解析(第一题到第十三题)
  • 【牛客刷题】 01字符串按递增长度截取转换详解
  • 【MyBatis-Plus】一、快速入门
  • Day17: 数据魔法学院:用Pandas打开奇幻世界
  • MySQL面试题:MyISAM vs InnoDB?聚簇索引是什么?主键为何要趋势递增?
  • 从“换灯节能”到“智能调光”:城市智慧照明技术升级的节能革命
  • LangChain4j (3) :AiService工具类、流式调用、消息注解
  • 吴恩达 Machine Learning(Class 2)
  • 数字时代著作权侵权:一场资本与法律的博弈
  • 「Flink」业务搭建方法总结
  • 嵌入式设备Lwip协议栈实现功能
  • 摔倒检测数据集:1w+图像,yolo标注