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

02-接口interface 新花样

接口也能写实现 - default

JDK8:我要实现流,我要让集合类实现stream() 方法
我:你准备怎么实现
JDK8: 我要在interface Collection 上新加一个方法 stream
我:Collection 上加一个方法可是大事啊,Collection 在java里面可是有很大的势力的啊,麾下实现类数不胜数,世界各地都在使用实现类,你加一个方法,所有的实现类都要进行实现。你自家人 arrayList,linkedlist,map还好说,外家兄弟怎么说,俗话说 断人财路,如同杀人父母, 别人一人一口吐沫就能淹死你。
JDK8: …
JDK8: …
JDK8: 那我就默认实现,interface里面也可以写方法,但是要使用 defualt 声明。使用defualt 定义的方法,实现类可以默认不进行实现,这样就能解决问题,就能不被口诛笔伐了 😊😊
我: 厉害了呀,这样的话是不是也可以做模版模式,抽象一个固定的模版方法为default,差异化的方法让他的实现类实现就行?
JDK8: 牛啊

public interface NameInterface {  String name();  //defualt 定义模版方法default void test() { System.out.println("all init");System.out.println("my name is " + name()); System.out.println("all doing something"); }  class Dog implements NameInterface {  @Override  public String name() {  return "dog";  }  }  public static void main(String[] args) {  //匿名内部类NameInterface cat = new NameInterface() {  @Override  public String name() {  return "cat";  }  };  NameInterface dog = new Dog();  System.out.println(dog.name());  System.out.println(cat.name());  }  }

接口也能private - JDK9

JDK9: 接口类一版都是共有方法,但是我的上一辈引入了defualt 关键字之后,接口也能实现方法了, 这个也随之造成了方法的公开和私有性,有一些接口上的函数是不需要公开对外的,那就在我这里实现吧! 接口 interface 的private 私有化接口!!

public interface PrivateInterface {  private String pm() { // private 自动 default  return "self private";  }  default void test() {  System.out.println(pm());  }  class Demo implements  PrivateInterface {}  public static void main(String[] args) {  Demo demo = new Demo();  demo.test();  // demo.pm(); 'pm()' has private access in 'com.hjh.test.PrivateInterface'  }  }

相关文章:

  • 持安科技亮相张江高科895创业营,总评分第三名荣获「最具创新性企业」!
  • vue diff算法介绍
  • JOSEF约瑟 漏电继电器LLJ-400F 配套零序互感器φ100mm 50-500mA 0.1S 导轨安装
  • 290.【华为OD机试】连续出牌数量(深度优先搜索DFS—JavaPythonC++JS实现)
  • 如何准确获取PDF文件中的标题
  • mac苹果电脑c盘满了如何清理内存?2024最新操作教程分享
  • Stable Video文本生成视频公测地址——Scaling Latent Video Diffusion Models to Large Datasets
  • 【小程序】媒体API能力集成指南——图片API
  • web运行时安全
  • 【并发编程】线程基础知识
  • 我是如何写作的?
  • 深入理解分库、分表、分库分表
  • C#学习总结
  • 大数据技术(一)
  • Visual Studio C++项目远程断点调试客户现场程序方法
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Angularjs之国际化
  • codis proxy处理流程
  • idea + plantuml 画流程图
  • Intervention/image 图片处理扩展包的安装和使用
  • iOS 颜色设置看我就够了
  • js如何打印object对象
  • mysql 5.6 原生Online DDL解析
  • PAT A1050
  • ReactNativeweexDeviceOne对比
  • swift基础之_对象 实例方法 对象方法。
  • TCP拥塞控制
  • vue:响应原理
  • 给新手的新浪微博 SDK 集成教程【一】
  • 回顾 Swift 多平台移植进度 #2
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 判断客户端类型,Android,iOS,PC
  • 前端_面试
  • 前端临床手札——文件上传
  • 源码安装memcached和php memcache扩展
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • ###C语言程序设计-----C语言学习(3)#
  • ###C语言程序设计-----C语言学习(6)#
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #考研#计算机文化知识1(局域网及网络互联)
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (2)nginx 安装、启停
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (十三)Maven插件解析运行机制