基本上所有的Java教程都会告诉我们Java接口的方法都是public、abstract类型的,没有方法体的。

但是在JDK8里面,你是可以突破这个界限的哦。

== 一个类实现某个接口,必须重写接口中的所有方法吗?

如果子类是非抽象类,则必须实现接口中的所有方法; 
如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象类中允许有抽象方法的存在!

  1. public interface ItfTest {//定义一个接口
  2. public void test();//定义接口的方法
  3. }
  4.  
  5. public abstract class AbsTest implements ItfTest {
  6. //实现一个抽象类,继承ItfTest接口,可以不重写test方法,由AbsTest的子类实现
  7. }

== 上面是之前的定义了,jdk8开始,接口中有方法体的方法 子类不需要实现。举例:

  1. MyInterface.java:
  2. interface MyInterface{
  3. String myNewName(String newName);
  4.  
  5. default String myOldName(){
  6. return "chao";
  7. }
  8.  
  9. }
  10.  
  11. GetName.java:
  12. public class GetName implements MyInterface{
  13.  
  14. public static void main(String args[]){
  15. GetName getName = new GetName();
  16. //可以直接调用接口中的默认方法myOldName()
  17. System.out.println("my old name is "+getName.myOldName());
  18. String newName = "超人";
  19. getName.myNewName(newName);
  20. }
  21.  
  22. //只需要实现接口中没有方法体的方法即可;
  23. public String myNewName(String newName){
  24. System.out.println("my new name is "+newName);
  25. return "my new name is "+newName;
  26. }
  27. }
  28. 运行结果:
  29. my old name is chao
  30. my new name is 超人

拓展:

dt.jar是关于运行环境的类库,主要是swing的包 
tools.jar是关于一些工具的类库 
rt.jar包含了jdk的基础类库,也就是你在java doc里面看到的所有的类的class文件

编译和运行需要的都是toos.jar里面的类 , 分别是   
  sun.tools.java.*;   
  sun.tools.javac.*;

==以上背景:

 为什么是.class,难道我的环境可以看到.class的源码??

某天在看public interface Map<K,V> 接口( java.util.Map<K, V>)时发现 1、里面有一个内部接口 java.util.Map.Entry<K, V>

2、该接口的方法 java.util.Map.replaceAll(BiFunction<? super K, ? super V, ? extends V>) 等方法都有方法体,如:貌似要加上 default

  1. * @since 1.8
  2. */
  3. default V replace(K key, V value) {
  4. V curValue;
  5. if (((curValue = get(key)) != null) || containsKey(key)) {
  6. curValue = put(key, value);
  7. }
  8. return curValue;
  9. }

-------

  1. * @since 1.8
  2. */
  3. default boolean remove(Object key, Object value) {
  4. Object curValue = get(key);
  5. if (!Objects.equals(curValue, value) ||
  6. (curValue == null && !containsKey(key))) {
  7. return false;
  8. }
  9. remove(key);
  10. return true;
  11. }

default boolean remove(Object key, Object value)

Map.class是在package java.util 中的,而他们又在 rt.jar包中的
C:\Program Files\Java\jdk1.8.0_102\jre\lib\rt.jar

  

JDK8- interface接口可以写方法体了-- 惊 dt.jar包等的更多相关文章

  1. HttpClient方式调用接口的java 简单案例源码+附jar包

    1 package com.itNoob.httpClient; import org.apache.commons.httpclient.HttpClient; import org.apache. ...

  2. 简单的java实验,涉及到 类继承以及接口问题,方法体的重写(区别于重载)

    package test ; abstract class Animal { abstract void cry(); abstract String getAnimalName(); } class ...

  3. Interface, 接口的实现初解

    百度是这么说的: Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 两种含 ...

  4. java中抽象类和空的方法体有什么区别?

    public abstract void test();抽象方法public void test(){};方法体为空这两个有什么区别? public abstract void test(); 抽象方 ...

  5. Scala 孤立对象和单例对象方法体的用法和例子

    [学习笔记] 1  以object关键字修饰一个类名,这种语法叫做孤立对象,这个对象是单例的. 相当于将单例类和单例对象同时定义.相当于java中的单例,即在内存中只会存在一个Test3实例.创建一个 ...

  6. 实习第一周第一天:接口 extends是继承类,implement是实现接口,原接口里面的方法填充,方法名也是不变,重写override是父类的方法名不变,把方法体给改了

    一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为( ...

  7. null引用,有时候是实现了父类的方法,方法体没写任何实现

    null引用,有时候是实现了父类的方法,方法体没写任何实现 /* @Override public void attachView(MonthListContract.View view) { } * ...

  8. interface接口

    当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用另一种形式定义和表示,就是接口 interface. 定义接口使用的关键字不是class,是interface.接口中常见的成员: 这些成员都有 ...

  9. JDK8新增接口的默认方法与静态方法

    JDK8之前,interface中可以定义常量和抽象方法,访问修饰符是public. public interface A { /** a1和a2写法是等价的 */ public static fin ...

随机推荐

  1. 《JAVA程序设计》_第五周学习总结

    一.本周学习内容 1.接口--6.1知识 接口的声明 interface 接口名 接口体 只有常量和抽象方法 (用final.static.public修饰的变量,关键词可省略) (用abstract ...

  2. Emit动态代理.NetCore迁移之旅

    [前言] 前面我们介绍了Aop 从静态代理到动态代理:https://www.cnblogs.com/7tiny/p/9657451.html 我们在.NetFramework平台下使用微软提供的Em ...

  3. JS-数组操作3

    1. 找出数组 arr 中重复出现过的元素 function duplicates(arr) { var result = []; var count = []; for (var i=0;i< ...

  4. 06-JavaScript的流控制语句

    06-JavaScript的流控制语句 JavaScript的流控制语句主要分为三大类: 顺序控制:因为JS是一门解释性语言,所以从上至下按顺序依次执行 分支控制:主要分为if条件语句和swith开关 ...

  5. java 的数据类型及其所占的字节数

    1.char java中的一个char是2个字节.java采用unicode,2个字节来表示一个字符. 一个数字或英文或汉字都是一个字符,只不过数字和英文时,存储的2个字 节的第一个字节都为0,就是浪 ...

  6. restfull规范、DRF视图和路由

    一.restfull规范的简单介绍 1.介绍 REST:表述性状态转移,是一种web交互方案 资源:在web中只要有被引用的必要都是资源 URI: URI 统一资源标识符 URL 统一资源定位符 统一 ...

  7. eclipse报错 : One or more constraints have not been satisfied.

    当eclipse进行报错时,但是不影响运行时,这种错误一般是编译时的问题 进行修改3个地方,即可完成 一 :  进行修改这三个地方的配置文件,都改成你统一的jdk版本,和你用的Dynamic Web ...

  8. 行为驱动开发BDD和Cucunber简介

    测试驱动开发(TDD) 1.测试驱动开发,即Test-Driven Development(TDD),测试驱动开发是敏捷开发中的一项核心实践和技术,也是一种设计方法论.TDD的原理是在开发功能代码之前 ...

  9. django系列 2 :启动应用,目录结构解读

    来源:https://docs.djangoproject.com/en/2.1/intro/tutorial01/ 该教程是创建一个用于投票的网页. 1.使用命令创建site 进入要创建site的目 ...

  10. centos中编译安装nginx+mysql +php(未完)

    参考地址:http://www.cnblogs.com/htian/p/5728599.html 去官网找到PCRE,并下载http://www.pcre.org/wget ftp://ftp.csx ...