接口之间的继承
来源:互联网 发布:rpm yum 区别 编辑:程序博客网 时间:2024/06/07 18:46
在JAVA中,众所周知,一个类只能继承另一个类。一个接口则可以实现多个接口,JAVA此措施一定程序上弥补了类只能单一继承的遗憾,比如实现多线程的类可以继承Thread,也可以实现Runnable接口,那么当你需要去继承如JFrame类的时候,你只能用后者去实现。如果再要响应鼠标事件,那再implements MouseListener这个接口。可能大家对于接口之间的继承,很少碰到,其实这只是语法层次上的讨论,在实现设计时,很少会这样做。接口之间继承用extends关键字,可以继承多个接口。并不是用extends 后边就只能有一个类。
interface A{ public void f(); }
interface B{ public int f(); }
interface C extends A,B{}
这里是编译出错的。只用返回类型不同,来区分方法是出错的。下例不出现这种情况,但也出现极大的混淆,并不编译出错,只是class E 中的mB方法是一种覆盖,当方法签名完全一致时,优先考虑是覆盖。
interface A{
public static final int PI = 3.14; //通常情况一个实现类可以不加接口名访问接口常量!
void mA();
}
interface B{
public static final int PI = 3.15; //下方C 去多重继承这两个接口时会产生混淆,所以调用接口常量一律加上接口名,否则编译失败!出错:The field PI is ambiguous
void mA();
void mB();
}
interface C extends A,B{ void mC();}
class D implements B{
public void mB(){
System.out.println("D.mB");
}
}
public class E extends D implements C{
public void mA(){}
public void mB(){ //注:这里就一种覆盖class D中mB方法的行为,并不是实现C中的mB方法。
System.out.println("E.mB");
}
public void mC(){
}
public static void main(String[] args) {
D ref1 = new E();
ref1.mB();
((D)ref1).mB(); //动态绑定到E类中的mB方法
D ref2 = new D();
ref2.mB(); //只用自身的方法。
}
}
如果延伸开来说的话,implements给编译器的指示,就是要你去检查所实现的实体类中有否此方法,即使这个方法是从父类继承下来的。接口是一种规程,只要遵守了这种规程的任何方法都是可行的。所以接口具有很强的开放性,所以设计模式中提倡面向接口编程,因为接口是开放的,被大家都接受的,所以也是更加稳定的。如下边的代码:
interface I{
void fun();
}
class G{
public void fun(){
System.out.println("G.fun");
}
}
class H extends G implements I{ //这个类并没有实现接口I 中的方法fun,只是继承自父类。
public static void main(String[] args) {
new G().fun(); }
}
- 接口之间的继承
- java中接口之间的继承
- java中的接口和接口之间的继承问题
- 继承,抽象,接口之间的关系和区别
- 浅谈类、抽象类、接口和继承之间的关系
- 继承,抽象,接口之间的关系和区别
- 类,抽象类,接口和继承之间的关系
- 类、抽象类、接口和继承之间的关系
- 理解C#中接口、继承、抽象、虚拟之间的区别
- 抽象类与接口之间的继承和实现关系
- 类与类、类与接口、接口与接口之间的继承个数问题
- Java 接口与类之间继承例题
- java8 接口之间继承与覆盖
- JS继承之间的
- C#接口-接口的继承
- 接口继承接口的意义
- 接口继承接口的意义
- C#接口-接口的继承
- 跟我学设计模式视频教程——适配器模式,适配器模式VS装饰模式
- 跟我学设计模式视频教程——观察者模式,迭代器模式
- java中 什么叫隐藏(Hide)? 最好给个例子
- 如何在RED 6.0 I686版本下安装C++编译器
- 跟我学设计模式视频教程——管擦者模式(下),责任链模式(上)
- 接口之间的继承
- tabBarController-标签控制器
- Cocos2d 游戏状态机
- 黑马程序员——java.lang.System
- 2.1.22 Candy
- 使用boost property_tree 生成XML配置文件
- CSS 盒模型 基本术语解释
- ORACLE批量杀死锁
- oracle character