关于Java中接口继承接口
最近有些清闲,顺便回回炉,巩固一下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++多继承带来的麻烦
所以呢...目前先留个眼,等以后再来补充吧..或者等某个大牛来指点一下迷津,小弟不胜感激
也许从设计模式的角度上更好(但我没看完)
更多相关文章
- Java Quartz的使用方法,实现程序计时
- 将行计数器方法与字数统计方法相结合
- php 调用java 接口
- java基础:集合框架之Map(共性方法)
- 深入理解Java Callable接口
- JAVA中的反射只获取属性的get方法
- 再论javaIO之拷贝MP3(read方法返回int的原因)
- java基础-Arrays类常用方法介绍
- eclipseIDE for Java EE 下 离线 安装CDT的方法