接口之间的继承

原文地址:http://socket.blog.163.com/blog/static/209873004200931511140616/

在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();   }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值