A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© NeXtyin 中级黑马   /  2016-5-8 22:43  /  397 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


之前我们知道,采用interface为我们提供了一种将抽象与实现分离的结构化的方法,但是interface的作用远不止此,在Java中接口解决了一个非常重要的问题:多继承。在C++中,实现多重继承是比较简单的事儿,但是Java继承机制不允许多重继承,所以如果想要整合不同类的功能,就需要使用接口,我们来看个例子:
[java] view plain copy
interface CanFight {void fight();}  
interface CanFly {void fly();}  
interface CanSwim {void swim();}  
class ActionCharacter {public void fight(){}}  
class Hero extends ActionCharacter implements CanFight, CanFly, CanSwim {  
  
    @Override  
    public void swim() {}  
  
    @Override  
    public void fly() { }  
  
}  
public class Adventure {  
      
    public static void t(CanFight x){x.fight();}  
      
    public static void u(CanSwim x){x.swim();}  
      
    public static void v(CanFly x){x.fly();}  
      
    public static void w(ActionCharacter x){x.fight();}  
      
    public static void main(String[] args) {  
        Hero h = new Hero();  
        t(h);  
        u(h);  
        v(h);  
        w(h);  
    }  
}  
我们可以看到:
1、Hero类中拥有了所有类的功能。
2、Hero可以和它实现的这些接口进行相互转换,当我们将hero对象做参数,传入Adventure类的各个方法时,Hero类向上转型了。(此处我们得出了一句话:在Java中,接口可以和实现了该接口的类相互转换)。讲到此处,我想总结下使用接口的好处:
1、接口可以实现向上转型,多个具有共同属性的类可以将它们的共同点提取出来,做成抽象,这样层次分明,统一管理。
2、接口不具有任何实现,最适合做基类。
总结一下抽象类与接口的区别和联系:
a)  抽象类是类,可以有实体方法。
b)  抽象类不能实现多继承,而接口可以。
c)  如果需要创建不带任何方法定义和成员变量的基类,则使用接口,如果类中需要有部分具体的实现,则使用抽象类。
d)  如果事先想要将某类设计为一个基类,那么首选接口。(注意c和d是接口的使用场景)
接口可以通过继承(extends)接口,来拓展功能。接口中的域默认是final、static的,我们可以通过类名来直接引用。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马