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 "+OldName());
String 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⾥⾯的类 , 分别是
==以上背景:
为什么是.class,难道我的环境可以看到.class的源码??
某天在看public interface Map<K,V> 接⼝( java.util.Map<K, V>)时发现 1、⾥⾯有⼀个内部接⼝ java.util.Map.Entry<K, V>
2、该接⼝的⽅法 java.placeAll(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) ||
java replace方法(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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。