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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 幕后黑手 于 2018-4-20 23:35 编辑

    在javaEE就业班的不断学习中,
    大量的知识需要同学们拥有深厚的java基础功底去消化,
    而接口就是java基础的重点内容之一,
    鉴于有很多同学对接口的理解还是很基础,
    所以,我希望以一个简单易懂的方式帮助大家更好的理解接口,
    便于大家在接下来的课程当中,能快速掌握就业班的知识,
    内容如有不足的地方还请各位大神批评指正,补充完善
首先,在日常生活中的接口
      如:电源插座接口
任何电器只要有符合规范的插头,就可以插入插座,并获得电力
而每个厂家插座的生产技术、工艺都不一样,因为接口的实现可以不一样,但是并不影响电器的正常工作。插座的内部实现对于电器来说是完全屏蔽的。

所以如上我们可以简单总结为:1.按照接口规范进行方法调用,就能获得所期望的功能
                                             2.按照接口规范实现接口的的方法,就能提供所期望的功能
javaSE学习中学到的接口
  概述:接口是特殊的抽象类,所有的属性都是公开静态常量(全局常量),所有的方法都是公开抽象方法而且没有构造方法。
       而在1.8版本中,可以写方法体.
     
       特点:
              1.是程序的功能扩展
              2.对外暴露的规则
              3.降低耦合性
              4.可以用来多实现

下面用一个例子帮助大家理解接口的概念
例子:
       首先你作为一个汽车生产者,会生产不同品牌的汽车,每个汽车都需要有能开动起来的功能

// 定义一个接口,只要实现该接口,车就能开起来
public interface canGo{
      void go();                               //能开的功能
}
// 定义奥迪车实现接口
public class Audi implements canGo{
      public void go(){
            System.out.println("奥迪开起来了");
      }
}
// 定义捷达这个车实现接口
public class JieDa implements canGo{
      public void go(){
            System.out.println("桑塔纳开起来了");
      }
}
//好了,现在你需要找一个会开车的司机,如果没有接口,每次有新的车生产出来,你就需要找到司机,教他如何开这辆车
public class Driver{
      public void drive(Audi audi){      //教他开奥迪
            audi.go();
      }
      public void drive(JieDa jd){      // 教他开捷达
            jd.go();
      }
}
/*然而,有接口时,我调用drive()方法, 让接口作为形式参数, 当你的车实现canGo这个接口时, 你的子类就可以利用面向对象的多态, 作为实际参数传入到drive()方法中,
调用开车方法的时, 无论你的保时捷还是兰博基尼都可以, 只要这些车实现canGo这个接口就行。*/

public class Driver{
      public void drive(canGo cg){        //接口作为形式参数
            cg.go();
      }
}

Public class test{                  

      public static void main(String[] args) {

            Driver dr = new Driver();     //实例化一个老司机

            Audi audi = new Audi();       //实例化一个奥迪车

            Dr.go(audi);            //把车交给老司机
             //控制台就会输出奥迪开起来了
      }
}

整个过程我这个指挥者其实根本不知道来的到底什么牌子的车,我需要找一个老司机,把这些车都全部交给司机,老司机就知道怎么去开.
因为这些车都实现了我canGo这个接口,而老司机就能开所有实现了我这个接口的车。
这样就有一个好处,假如明天来了一辆拖拉机或者卡丁车,只要它实现了我这个接口,我只管交给老司机处理就可以了,
老司机本身也不需要再去改变什么,我这个指挥者也只需要找一个(实例化)老司机就可以了.
假如没有接口,
就很难受了,来一个别克车,我要去创造一辆别克车,还要实例化,再来一辆大众车,我要再去创建一辆大众车,同样要实例化,
还要配备专门的老司机去接待,就会相当麻烦.

3 个回复

倒序浏览
写的很辛苦的
喜欢的老铁点播关注
关注主播不迷路
回复 使用道具 举报
回复 使用道具 举报
我爱你  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马