关于Java中接口继承接口
来源:互联网 发布:多普达p660同步软件 编辑:程序博客网 时间:2024/04/27 04:40
最近有些清闲,顺便回回炉,巩固一下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中接口继承接口
- java中接口可以继承接口吗?
- Java接口继承接口
- JAVA中继承和接口
- java中接口多继承
- 关于Java中继承和接口的理解
- 关于Java使用接口实现多重继承
- JAVA关于继承、多态和接口
- C# 中关于接口实现、显示实现接口以及继承
- 关于继承和接口
- java接口 接口实现 继承
- java 接口继承接口作用
- java中一个接口可以继承几个接口
- Java中接口可以继承多个接口
- java中单继承、接口、抽象类
- Java中类的继承与接口
- java中继承与接口的区别
- java中接口之间的继承
- 酷派 全魔王 8298-M02 ROOT
- Ubuntu16.04+Opencv2.4.13+caffe配置跟踪算法Goturn
- 操作系统总结 处理机调度与死锁
- 【C#】面向对象之继承
- zabbix
- 关于Java中接口继承接口
- CSS之Responsive设计和CSS3 Media Queries的结合
- Java制作屏幕截图软件(还可以保存到剪切板内)
- java中vector,array,list,arraylist的区别
- maven的安装
- JDBC--解决sql注入
- Android studio细节问题
- 原串翻转
- c3p0连接池