本帖最后由 幕后黑手 于 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这个接口,而老司机就能开所有实现了我这个接口的车。 这样就有一个好处,假如明天来了一辆拖拉机或者卡丁车,只要它实现了我这个接口,我只管交给老司机处理就可以了, 老司机本身也不需要再去改变什么,我这个指挥者也只需要找一个(实例化)老司机就可以了.
假如没有接口,就很难受了,来一个别克车,我要去创造一辆别克车,还要实例化,再来一辆大众车,我要再去创建一辆大众车,同样要实例化, 还要配备专门的老司机去接待,就会相当麻烦.
|