1.接口与类
我们知道Java本身提供了八种基本数据类型,分别为byte,short,int,long,boolean,float,double,char,只有这八种基本数据类型是远远不够的,那么Java中的类的概念就为我们大大扩大了数据类型的选择,有了类,我们就可以自定义数据类型,任何我们想要的类型都可以。我们知道,Java中的类体现的是数据类型的概念,比如我们把动物归成一类,然后动物这一类又可以细分为各种各样的类(猫科动物,鱼类等等)。但是有时候我们光分类并不利于我们解决问题,我们更多的是看重能力,比如拿烧水这件事来说,烧水是我们的目的,我们可以用电水壶烧水,也可以用煤气灶烧水,还有可能我们用饮水机烧水等等,烧水的手段很多,在这里,我们往往看重的是能力,某某设备是否具有烧水这个能力,如果有,我们的目的就很容易达到了,所以,Java中接口的概念就类似于上面烧水的例子,强调的是能力。
2.使用接口的好处
- 使用接口我们更容易统一处理;我们可以用接口类型的变量去引用实现了接口能力的子类对象,子类对象实现的细节我们不需要知道,我们往往只需要知道接口中提供的这个方法所要解决的问题是什么,也就是具备什么样的能力,因此,我们大多数时候就可以面向接口编程,比如说在代码的某一处集中操作接口中的方法就可以了,然而实际上在代码真正的执行过程中执行的是实现了接口能力的子类对象中的代码逻辑(多态和动态绑定)。
- 降低耦合;降低耦合是使用接口最直接的好处,当我们定义好规范的接口之后,我们只需要面向接口编程(这条跟上面这条其实很相似),通过多态和动态绑定来达到松耦合的目的,只要接口规范不变动,具体的实现细节我们可以随意改动,并且对使用者来说,这些都是不可见的,使用者往往关注的是是否具有某种能力,具体实现这种能力的逻辑不是他该关心的事儿。因此,使用接口的灵活性更大。
3.使用接口的注意事项
接口中的变量
public interface Run{ public static final float speed = 50f; ... }其实上面这种写法和下面这种写法其实是相同的。
public interface Run{ float speed = 50f; ... }如果变量不写
public static final系统在默认情况下也是public static final的。这样,我们就可以跟使用类中静态变量的形式一样使用它Run.speed。接口中的方法
public interface Run{ public void run1(); protected void run2(); void run3(); public abstract void run4(); }像上面四种方法的写法哪一种是错误的呢,当然了,明眼人一眼就能看出是第二个方法,也就是protected修饰的方法,第一个方法,第三个方法以及第四个方法的写法其实是一样的,在接口中,在声明方法时即使不加访问修饰符,默认情况下就是public abstract的,因此,写与不写其实是一样的,有些IDE中,如果你写了public或者public abstract,public或者poublic abstract并不是高亮的,而是灰色的,对于我这种代码洁癖的人来说,并不能忍,看到了直接删掉,当然了,这只是我个人的喜好,大家可以不用效仿我。
接口的继承
public interface Run extend Walk,RaceWalk{ ... }接口继承和类继承不一样,类继承只能实现单继承,也就是一个类只能有一个父类,而接口不是,接口可以同时继承多个接口,那么问题来了,可能会有人问,接口可以继承类吗,可以继承多个类吗,我想说的是“孩子,你真的需要去补一补Java基础了”。
4.总结
好了,接口就扯这么多,没有说的很全,只是提一下接口的要点以及使用过程中需要注意的点,当然了,如何把接口使用的“出神入化”是一门硬功夫,需要慢慢的修炼,由于本人能力的限制,这里就暂且介绍这么多,对于本文内容如有不当之处欢迎各位大佬纠错指正,谢谢!