[Java教程]纳尼,java可以在接口中实现非抽象方法了?

0 2016-09-17 18:00:20

纳尼,接口中可以定义实例方法了?!

纳尼,接口中还可以定义静态方法了?!

没错,在Java8中新增了很多新的特性,其中就包括可以在接口中添加方法和变量。

首先我们来看下代码

1 public interface SourceInterface 2 { 3 int a = 5; 4 int b = 10; 5 6 public static int add() 7 { 8 return a + b; 9 }10 11 public static void reset() 12 {13 // do sth14 }15 16 public default int f1()17 {18 return a;19 }20 21 public default void f2()22 {23 // do sth24 }25 }26 27 class learnCode28 {29 public void userInterface()30 {31 int xx = SourceLearning.add();32 SourceLearning.reset();33 SourceLearning instance = new SourceLearning()34 {35 @Override36 public void f2()37 {38 // do sth 、39 }40 };41 instance.f1();42 instance.f2();43 //int y=instance.add(); 注意这句会编译错误44 }45 }

代码中,我们可以发现以下几点不同:

1、在接口中,可以直接添加静态方法。

该静态方法作为接口的类方法,可以直接使用。不需要依托某个实现类。

2、在接口中,可以直接添加非抽象的实例方法。

在实例方法的申明中,需要增加default关键字修饰,因此这种方法也称为默认方法。他是接口自带的方法。接口被实现后,实例可以直接使用这些默认方法,同时如果对默认方法需要重写时,可以直接重写即可。

这两点新特性相对于java8之前的版本来说,可以说有质的改变。

引申:

可以增加方法的接口,开始变的更像抽象类。Java类在实现了多个拥有默认方法的接口后,从侧面展现的像是实现了多重继承的影子。

注意:如果两个接口的默认方法出现重复申明,则需要在实现方法中重写该方法,否则jvm在执行时,无法确定究竟应该使用哪个接口的同名方法。这应该可以算是本次新引入特性的一个弊端,如果是指定使用的是某个接口中的默认方法时,可以采用1 @Override2 public void f2()3 {4 SourceLearning.super.f2();5 }

的形式

那么,java为什么要引入默认方法呢?如果需要往接口中添加方法,直接使用抽象类即可,为什么要破坏已有的约定呢?

我认为主要原因如下:

在面向接口的编程过程中,发现原有的接口中,都需要添加一个相同的方法,那么现在有两种方案:

1)接口换抽象类,抽象类中添加该方法

2)接口中添加该抽象方法,在每一个接口的实现类中,均添加相同的实现方法。

无论选择哪种方法,都需要对已有的代码做出非常大的改动。可是如果使用默认方法,使对接的接口默认就拥有某些功能的实现,则很好的解决了假设的问题。

本文网址:http://www.shaoqun.com/a/250786.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

JAVA

0

java接口有非抽象方法_[Java教程]纳尼,java可以在接口中实现非抽象方法了?相关推荐

  1. java 接口是抽象类吗_我是如何理解Java抽象类和接口的

    在面试中我们经常被问到:Java中抽象类和接口的区别是什么?然后,我们就大说一通抽象类可以有方法,接口不能有实际的方法啦;一个类只能继承一个抽象类,却可以继承多个接口啦,balabala一大堆,就好像 ...

  2. 南邮java大作业实验报告_南京邮电大学java第三次实验报告

    实 验 报 告 ( 2017 / 2018学年 第2学期) 课程名称 JAVA语言程序设计 实验名称 Java集成开发环境的安装与使用. Java变量.表达式与控制结构 实验时间 2018 年 4 月 ...

  3. java寻找最大的字母_【LeetCode(Java) - 744】寻找比目标字母大的最小字母

    [LeetCode(Java) - 744]寻找比目标字母大的最小字母 [LeetCode(Java) - 744]寻找比目标字母大的最小字母 文章目录 1.题目描述 2.解题思路 3.解题代码 1. ...

  4. 《 郝斌 java自学视频 完结 》_《[郝斌]Java自学视频[完结]》AVI[压缩包]

    中文名: [郝斌]Java自学视频[完结]资源格式: 压缩包版本: AVI发行时间: 2009年地区: 大陆对白语言: 普通话文字语言: 简体中文简介: 特别说明: 视频原始来源为互联网,原始格式为F ...

  5. java 画笔跟swing组件_Java学习教程(基础)--Java版本历史(二)

    Java语言自JDK1.0版本以来经历了许多次更新,也在基本程序库中增加了大量的类别和包.从J2SE 1.4开始,Java语言的变动由 Java Community Process(JCP)管理,JC ...

  6. java是面向对象还是面向过程_Java教程分享Java面向对象与面向过程

    Java教程分享Java面向对象与面向过程,面向对象: 是一种看待问题, 解决问题的思维方式, 着眼点在于找到一个能够帮助解决问题的实体, 然后委托这个实体来解决问题 面向过程: 是一种看待问题, 解 ...

  7. java 汉字是多少字节_面试官:Java 中有几种基本数据类型是什么?各自占用多少字节?...

    认识基本数据类型 在学习基本数据类型之前,我们先认识一下这两个单词: 1.bit --位:位是计算机中存储数据的最小单位,指二进制数中的一个位数,其值为"0"或"1&qu ...

  8. java编写代码用什么_如何学习用Java编写代码:为什么要学习以及从哪里开始

    java编写代码用什么 by John Selawsky 约翰·塞劳斯基(John Selawsky) 如何学习用Java编写代码:为什么要学习以及从哪里开始 (How to learn to cod ...

  9. 此安装程序必须使用 java 开发工具包 (jdk) 执行_彻底搞懂Java开发工具包(JDK)安装及环境变量配置...

    [官方正版]java jdk 9学习笔记 78.4元 包邮 (需用券) 去购买 > 一.Java 和 JDK 是什么 Java:Java是一种优秀的程序设计语言,它有非常多的语言特性,如简单性. ...

  10. java为何重复调用方法_通过反射调用Java中的getter:重复调用它的最快方法是什么(在性能和可伸缩性方面)?...

    小编典典 您可以使用MethodHandle.其Javadoc写道: 使用Lookup API中的工厂方法,可以将Core Reflection API对象表示的任何类成员转换为行为等效的方法句柄.例 ...

最新文章

  1. 《数据科学家养成手册》--第四章---数据科学的使命
  2. 查询显示注释_SQL汇总--简单查询
  3. 85后博士不到一年发10篇顶刊!共发SCI50多篇
  4. CentOS 7上安装 MongoDB数据库 4.0.0最新版
  5. C# 大数组赋值给小数组,小数组赋值给大数组
  6. (C/C++学习)15.C语言字符串和字符数组
  7. 我选择的是一种生活态度
  8. oracle查询优化不走缓存,Oracle数据库存储优化问题
  9. 在浏览的地址栏中,直接调用js「javascript:alert(hello wrold);」。
  10. 论计算机的发展.doc,计算机的发展论文.doc
  11. 如何查找专栏(知乎专栏汇总)
  12. 用计算机制作多媒体作品小学,小学信息技术六年级上册《多媒体作品制作—古诗欣赏》教案...
  13. 【排障】为什么你发出去的邮件被退回
  14. python爬duitang的摄影类图片
  15. 开源图像数据集管理工具fiftyone使用
  16. 多期DID和事件研究法含文献和do代码
  17. 物质模拟器4.0版 改了bug,爆炸时也可移动
  18. 洛谷刷题:小玉家的电费、小玉在游泳、小鱼的航程(改进版)、小鱼的游泳时间、小鱼会有危险吗
  19. 发展数字经济的重要意义
  20. 平阴县实验学校计算机老师,人物 | 平阴县实验学校邢珍:认认真真做事,踏踏实实做人...

热门文章

  1. kali2.0部署docker
  2. OpenGL 坐标系统(Perspective)
  3. MoeCTF 2021Re部分------大佬请喝咖啡,A_game
  4. 超级任天堂游戏模拟器被曝安全漏洞
  5. Acwing第 27 场周赛【完结】
  6. 【PAT乙级】1067 试密码 (20 分)
  7. linux之变量的设置与显示
  8. SQL语言之数据控制语言(Oracle)
  9. integer加1_AP双语数学常用的术语(1)
  10. ?线程池为什么可以复用,我是蒙圈了。。。