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

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

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

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

如果子类是非抽象类,则必须实现接口中的所有方法;

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

public interface ItfTest {//定义一个接口

public void test();//定义接口的方法

}public abstract class AbsTest implementsItfTest {//实现一个抽象类,继承ItfTest接口,可以不重写test方法,由AbsTest的子类实现

}

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

MyInterface.java:interfaceMyInterface{

String myNewName(String newName);defaultString myOldName(){return "chao";

}

}

GetName.java:public class GetName implementsMyInterface{public static voidmain(String args[]){

GetName getName= newGetName();//可以直接调用接口中的默认方法myOldName()

System.out.println("my old name is "+getName.myOldName());

String newName= "超人";

getName.myNewName(newName);

}//只需要实现接口中没有方法体的方法即可;

publicString myNewName(String newName){

System.out.println("my new name is "+newName);return "my new name is "+newName;

}

}运行结果:

my old name is chao

mynew name is 超人

拓展:

dt.jar是关于运行环境的类库,主要是swing的包

tools.jar是关于一些工具的类库

rt.jar包含了jdk的基础类库,也就是你在java doc里面看到的所有的类的class文件

编译和运行需要的都是toos.jar里面的类 , 分别是

sun.tools.java.*;

sun.tools.javac.*;

==以上背景:

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

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

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

* @since 1.8

*/

defaultV replace(K key, V value) {

V curValue;if (((curValue = get(key)) != null) ||containsKey(key)) {

curValue=put(key, value);

}returncurValue;

}

-------

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

* @since 1.8

*/

default booleanremove(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 Files\Java\jdk1.8.0_102\jre\lib\rt.jar

2771e53c81b465a5d405429cd7199e15.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值