【面向对象】——浅谈接口

【背景】

       提到接口,想必大家都不陌生,在学习设计模式的时候,对于接口的认识更加深了,知识的学习需要不断地总结整理,颗粒收仓的过程,下面请随我来一起学习吧。

【正文】

       【为什么会有接口?】

            上一篇文章:【面向对象】——浅谈抽象类  ,我们提到了抽象类,抽象类的存在是为了将不同类中相同的方法抽离出来,子类继承父类时实现了代码的复用;由抽象类谈及接口,接口的存在是为了实现多重继承,java中只支持 单重继承,每个类只能有一个超类,但是可以实现多个接口。在生活中,我们会用到各种各样的接口,电脑主板上的PCI插槽的规范就类似与JAVA接口,声卡、网卡、显卡的内部结构不同,但是都可以插在PCI插槽上,而不用担心各个插槽与各个卡之间是如何对应的,这种情况下,如果我们套用“抽象类”的话,显卡、声卡、网卡属于不同的类型,无法通过“is a”找到一个合适的父类,但是细心观察可以发现他们都有一个共同的方法特征,都对主板的PCI插槽有各自不同的实现,这样一来,一个PCI插槽就可以搞定各种各样的卡,那么,PCI插槽一般的接口便应运而生了!

       【什么是接口?】

           接口(interface)是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦类实现了接口,类就可以支持接口所指定的所有属性和成员。简单来说,接口是一些方法特征的集合,但是没有方法的实现,接口中定义的方法在不同的地方被实现,可以具有完全不同的行为。对象与别的对象之间的交互是靠接口去实现的,别的对象与之交互能看到接口即可,不需要看到具体的实现,当改变实现时也不会影响到接口以及使用者的使用。

          举个例子来说,我们可以把电视看做一个对象,电视需要电,就去连接插座,插座就是一个接口,而电力是怎么产生的就是具体实现,电视只需要看到接口, 并不需要知道具体的实现时火力发电或者是水力发电。接口是标准的,实现是具体的实现发生了变化,比如发电厂把火力发电改成了水力发电,对于电视而言依然只需链接到接口就可以了,接口依然是原来那样,并没有发生任何变化。

       【接口的例子实战-java版】

          

public interface IPCI{   //Java接口,相当于主板上的PCI插槽的规范
     public void start();
     public void stop();
}
class SoundCard implements IPCI {   //声卡实现PCI插槽的规范
        public void start(){
            System.out.println("Du du…");
          }
        public void stop(){
             System.out.println("Sound stop!")
          }
}
class NetworkCard implents IPCI{    //网卡实现PCI插槽的规范
      public void start(){
         System.out.println("Send…");
      }
      public void stop(){
         System.out.println("Network stop!");
       }
}
public class Assembler{      //控制台输出会跟根据实际创建的对象类型调用相应的方法实现
       public static void main(String[] args){
         IPCI nc = new NetworkCard();
         IPCI sc = new SoundCard();
         nc.start();
         sc.start();
       }
}

       【类图表示】


    

       【使用场景】

            如果要创建将由一些不相关对象采用的功能,就使用接口。

            如果必须从多个来源继承行为,就使用接口,实现了接口就相当于拥有了某种特殊功能。

       【说明】

              定义接口和定义类相似,只是要把class关键字换为interface,类实现接口用implements表示。

              定义方法时只需要方法名,返回类型和参数列表,不能有方法体。

              接口的子类要么是抽象类,要么重写接口中的所有抽象方法。

              接口不能实例化,按照多态的方式,由具体的子类实例化,接口多态。

              因为所有定义在接口中的常量都默认为public、static 和final ,所有定义在接口中的方法默认为public和abstract,可以不用修饰符限定它们。

       【一句话总结】

               接口,“like a ”关系,个性化特征,多重继承。

       

【小编叨叨两句】

     接口和抽象类的知识不是一下就能说明白的,接口相对于抽象类来说,是更为纯粹的抽象,面向对象的编程思想贯穿我们学习的始终,在学习设计模式和大型框架的的时候,了解源码,体会大神是如何炉火纯青地运用的,加油啊!拜读了各位大神的著作,小编得知,功夫我还差的远,还需多练。请路过的朋友们多多指点,顺便点个赞!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑的大白啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值