4.8 接口的基本概念
本章目标
? 掌握接口的定义格式及使用 ? 掌握接口与抽象类的关系
接口是Java中最重要的概念之一,它可以被理解为一种特殊的类,是由全局常量和公共的抽象方法所组成。 【格式 接口的定义格式】
interface 接口名称{ 全局常量 ; 抽象方法 ; }
需要注意的是,在接口中的抽象方法必须定义为public访问权限,这是绝对不可改变的。
?提示:在接口中如果不写public,则也是public访问权限。
在很多的Java程序中,经常看到编写接口方法时省略了public,那么大家就会认为它的访问权限是default,实际上这是错误的,不管写与不写,接口中的方法永远是public。 范例:接口的定义
interface A{ // 定义接口A public static final String AUTHOR = \李兴华\ // 全局常量 public abstract void print() ; // 抽象方法 public abstract String getInfo() ; // 抽象方法 } 以上程序定义了一个接口,这里要提醒大家的是,在接口的基本概念中已经明确地声明了接口是由全局常量和抽象方法组成,所以此处的接口定义可以简化成如下的形式:
interface A{ // 定义接口A String AUTHOR = \李兴华\ // 全局常量 void print() ; // 抽象方法 String getInfo() ; // 抽象方法 }
与抽象类一样,接口若要使用也必须通过子类,子类通过impements关键字实现接口。
【格式 实现接口】
class 子类 implements 接口A,接口B,...{ }
从格式中可以清楚地发现,一个子类可以同时实现多个接口,那么这实际上就摆脱了Java的单继承局限。 范例:实现接口
interface A{ // 定义接口A public String AUTHOR = \李兴华\ // 全局常量 public void print() ; // 抽象方法 public String getInfo() ; // 抽象方法 } interface B{ // 定义接口B public void say() ; // 定义抽象方法 } class X implements A,B{ // X类同时实现A和B两个接口 public void say(){ System.out.println(\ } public String getInfo(){ return \ } public void print(){ System.out.println(\作者:\ } }; public class InterfaceDemo03{ public static void main(String args[]){ X x = new X() ; // 实例化子类对象 x.say() ; x.print() ; } }; 程序运行结果:
Hello World!!! 作者:李兴华
以上的程序中,一个子类同时实现了两个接口,这样在子类中就必须同时覆
写两个接口中的全部抽象方法。
在开发中一个子类既要实现接口又要继承抽象类,则可以按照下面格式进行定义。
【格式 继承抽象类实现接口】
class 子类 extends 抽象类 implements 接口A,接口B,…{ }
范例:子类同时继承抽象类和实现接口
interface A{ // 定义接口A public String AUTHOR = \李兴华\ // 全局常量 public void print() ; // 抽象方法 public String getInfo() ; // 抽象方法 } abstract class B{ // 定义抽象类B public abstract void say() ; // 定义抽象方法 } class X extends B implements A{ // X类线继承B类,再实现A接口 public void say(){ System.out.println(\ } public String getInfo(){ return \ } public void print(){ System.out.println(\作者:\ } }; public class InterfaceDemo04{ public static void main(String args[]){ X x = new X() ; // 实例化子类对象 x.say() ; x.print() ; } }; 程序运行结果:
Hello World!!! 作者:李兴华
在以上程序中因为抽象类和接口本身都有抽象方法,所以实现类中必须覆写3个抽象方法。另外,在Java中是允许一个抽象类实现多个接口的。
范例:抽象类实现接口
interface A{ // 定义接口A public String AUTHOR = \李兴华\ // 全局常量 public void print() ; // 抽象方法 public String getInfo() ; // 抽象方法 } abstract class B implements A{ // 定义抽象类B,实现接口A public abstract void say() ; // 定义抽象方法 } class X extends B{ // X类线继承B类 public void say(){ System.out.println(\ } public String getInfo(){ return \ } public void print(){ System.out.println(\作者:\ } }; public class InterfaceDemo05{ public static void main(String args[]){ }; } X x = new X() ; // 实例化子类对象 x.say() ; x.print() ; 程序运行结果:
Hello World!!! 作者:李兴华
在以上程序中,因为抽象类实现了接口,所以在抽象类中就包含了3个抽象方法,这样抽象类的子类就必须同时覆写3个抽象方法,在Java中一个接口是不允许继承抽象类的,但是允许一个接口继承多个接口,格式如下。 【格式 接口的继承】
interface 子接口 extends 父接口A,父接口B,…{ }
范例:接口的多继承
interface A{ // 定义接口A public String AUTHOR = \李兴华\ // 全局常量 public void printA() ; // 抽象方法 } interface B{ public void printB() ; } interface C extends A,B{ public void printC() ; } class X implements C{ // X类线继承B类 public void printA(){ System.out.println(\、Hello World!!!\ } public void printB(){ System.out.println(\、Hello MLDN\ } public void printC(){ System.out.println(\、Hello LXH\ } }; public class InterfaceDemo06{ public static void main(String args[]){ }; } X x = new X() ; // 实例化子类对象 x.printA() ; x.printB() ; x.printC() ; 程序运行结果:
A、Hello World!!! B、Hello MLDN C、Hello LXH
从上述程序中可以发现,接口C继承了接口A和接口B,这样在接口C中就同时存在3个抽象方法,子类X实现接口C后就必须同时覆写3个抽象方法。