• JDK8- interface接口可以写方法体了-- 惊 dt.jar包等


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

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

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

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

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

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

    MyInterface.java:
    interface MyInterface{
        String myNewName(String newName);
    
        default String myOldName(){
            return "chao";
        }
    
    }
    
    GetName.java:
    public class GetName implements MyInterface{
    
        public static void main(String args[]){
            GetName getName = new GetName();
    //可以直接调用接口中的默认方法myOldName()
            System.out.println("my old name is "+getName.myOldName());
            String newName = "超人";
            getName.myNewName(newName);
        }
    
    //只需要实现接口中没有方法体的方法即可;
        public String myNewName(String newName){
            System.out.println("my new name is "+newName);
            return "my new name is "+newName;
        }
    }
    运行结果:
    my old name is chao
    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

         * @since 1.8
         */
        default V replace(K key, V value) {
            V curValue;
            if (((curValue = get(key)) != null) || containsKey(key)) {
                curValue = put(key, value);
            }
            return curValue;
        }

     -------

         * @since 1.8
         */
        default boolean remove(Object key, Object value) {
            Object curValue = get(key);
            if (!Objects.equals(curValue, value) ||
                (curValue == null && !containsKey(key))) {
                return false;
            }
            remove(key);
            return true;
        }
    default boolean remove(Object key, Object value)

    Map.class是在package java.util 中的,而他们又在 rt.jar包中的
    C:Program FilesJavajdk1.8.0_102jrelib t.jar

      

  • 相关阅读:
    SpringBoot 集成Log4j、集成AOP
    SpringBoot 集成JUnit
    SpringBoot yml文件语法
    SpringBoot 集成MyBatis、事务管理
    SpringBoot 集成Spring JDBC
    模板引擎简介
    SpringBoot 解决“不支持发行版本xx”的问题
    SpringBoot 全局异常处理
    SpringBoot 静态资源的配置
    SpringBoot的起步依赖
  • 原文地址:https://www.cnblogs.com/rogge7/p/7766818.html
Copyright © 2020-2023  润新知