最近有些清闲,顺便回回炉,巩固一下Java基础,到翻到Collections 工具类 里有一个 Collecton.sort(List<T> list)方法,Ctrl 点了进去发现竟然实现了方法体,代码:

先来一段代码:

public interface List<E> extends Collection<E> {

......

@SuppressWarnings({"unchecked", "rawtypes"})
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray();
Arrays.sort(a, (Comparator) c);
ListIterator<E> i = this.listIterator();
for (Object e : a) {
i.next();
i.set((E) e);
}
}

.....

}

头一回看到这样写,于是又自己定义了一个接口并继承了Runnable并测试一下:

定义的接口:

package com.club;


public interface TestInterface extends Runnable {
@Override
default void run() {
// TODO Auto-generated method stub
System.out.println("hello");
}
}

实现类:

package com.club;


public class ImplTestInterface implements TestInterface {
@Override
public void run() {
// TODO Auto-generated method stub
TestInterface.super.run();
}


}

测试:

package com.club;


public class MainTest {
public static void main(String[] args) throws Exception {
ImplTestInterface test = new ImplTestInterface();
Thread t = new Thread(test);
t.start();
}
}

打印结果:

hello


于是本菜查阅了各种资料:但是没查着,于是从Java 接口的特性这一特性去试着理解一下,

  • 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为public abstract(只能是 public abstract,其他修饰符都会报错)。
  • 接口中可以含有变量,但是接口中的变量会被隐式的指定为public static final变量(并且只能是 public,用 private 修饰会报编译错误。
  • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

但还是解决不了的困惑...

如果按照某个类多实现的角度去想呢?接口也是类呀.

定义一个超级接口:

package com.club;


public interface SuperInterface {

void doSomething();
}

第一个接口:

package com.club;


public interface FirstInterface extends SuperInterface{
@Override
default void doSomething() {
// TODO Auto-generated method stub
System.out.println("doSomething overrid in FirstInterface");
}
}

第二个接口:

package com.club;


public interface SecondInterface extends SuperInterface{
@Override
default void doSomething() {
// TODO Auto-generated method stub
System.out.println("doSomething overrid in SecondInterface");
}
}

实现类:


package com.club;


public class Test implements FirstInterface,SecondInterface {


@Override
public void doSomething() {
// TODO Auto-generated method stub
FirstInterface.super.doSomething();
}

public static void main(String[] args) {
Test t = new Test();
t.doSomething();
}
}

打印:

doSomething overrid in FirstInterface


在实现类中无论实现了多少个SuperInterface的子接口,却只能调用某一个子接口的实现方法.,从Java 语义上理解也说的通,避免C++多继承带来的麻烦

所以呢...目前先留个眼,等以后再来补充吧..或者等某个大牛来指点一下迷津,小弟不胜感激


也许从设计模式的角度上更好(但我没看完)





更多相关文章

  1. Java Quartz的使用方法,实现程序计时
  2. 将行计数器方法与字数统计方法相结合
  3. php 调用java 接口
  4. java基础:集合框架之Map(共性方法)
  5. 深入理解Java Callable接口
  6. JAVA中的反射只获取属性的get方法
  7. 再论javaIO之拷贝MP3(read方法返回int的原因)
  8. java基础-Arrays类常用方法介绍
  9. eclipseIDE for Java EE 下 离线 安装CDT的方法

随机推荐

  1. android binder c++层 - 回调客户端服务
  2. Android中自定义Checkbox
  3. Android Developers:日历提供者
  4. Android下载网络图片到本地
  5. android如何改变默认横竖屏方向
  6. Android判断当前系统语言
  7. android SDK 更新出现错误的解决办法
  8. WebView 简单使用一
  9. layout_weight 权重
  10. Android各版本对应的SDK版本