一、接口及作用
接口是一个非常重要的概念,理解这个,先举一个实现生活中的实例。
现在,电脑主板,有很多插槽,可用来插CPU、内存等。当CPU等元件需要更新换代升级时,只要将CPU单独更换就可以了,而不需要更换主板。其实,主板上的这些暴露在外的插槽,就可以理解为接口。
接口就是对外暴露的规则,只要符合规则的CPU、内存,不论品牌、型号、规格,都可以安插使用。
接口是程序的功能扩展。有了插槽,也就提高了主板的功能扩展性,比如内存不够用了,我们就可以换成内容最大的内存条,或再加新的内存条。
接口降低了耦合性。有了规则,主板和CPU等元件的就分开了,可以分开生了。只要符合规则,元件就可以插入插槽进行使用。这样,主板厂商和CUP厂商之间的联系就少了。
二、接口的定义格式
class 用于定义类。
interface用于定义接口。
接口中常见的定义:常量、抽象方法
常量:public static final
方法:public abstract
接口中的成员都是public,而且这些修饰都是可以省略的,只要是interface,系统就会自动补足。
三、接口的特点
接口不能直接创建对象
类与类之间是“继承extends”。(因为父类中有非抽象内容,可以直接拿过来用)
类与接口之间是“实现implements”。(因为接口内的成员都是抽象的,子类要将父类中的成员全都实现后,才可使用)
接口与接口之间是“继承extends”。
接口可以被类多实现,即一个类可以实现多个类。这是对JAVA不支持多继承的一种转换形式。
interface Inter { public static final int NUM = 3; public abstract void show(); } class Test implements Inter // class是继承(因为父类中有非抽象内容,可以被子类调用) // interface是实现(因为子类要全都将接口中的内容实例化后才能使用) { public void show() { } } public class InterfaceDemo { public static void main(String[] args) { Test t = new Test(); System.out.println(t.NUM); // 对象可以调用成员 System.out.println(Test.NUM); // 类可以调用成员。因为Test实现了Inter,相当于其中也有NUM System.out.println(Inter.NUM); // 接口可以调用成员 } }
多现实
interface Inter { //第一个接口 public static final int NUM = 3; public abstract void show(); } interface InterA { //第二个接口 public abstract void method(); } class Demo { public void myFunction() { } } // 类可以继承类同时实现多个接口,同时继承类。 //因为接口中的方法没有方法主休,所以可以多实现,由子类任意定义。 class Test extends Demo implements Inter, InterA { public void show(){} //复写接口内的所有方法 public void method(){} //复写接口内的所有方法 }
interface Inter { //第一个接口 public static final int NUM = 3; public abstract void show(); } interface InterA { //第二个接口 public abstract void show(); } class Test extends Demo implements Inter, InterA { public void show(){} //两个接口内的方法同名时,实现多接口时只要复写一次即可 }
接口之间是继承
interface A { //A有一个方法 void methodA(); } interface B extends A { //B有两个方法 void methodB(); } interface C extends B { //C有三个方法 void methodC(); } class D implements C{ //接口A继承B,B函数C,类D实现接口C,D中要复写3个方法 public void methodA(){} public void methodB(){} public void methodC(){} } interface A { //A有一个方法 void methodA(); } interface B { //B有一个方法 void methodB(); } interface C extends A、B { //C有继承A、B void methodC(); }