组团学

接口的应用

阅读 (982469)

1、接口概述与使用

1.1、什么是接口

接口(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合。接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

1.2、接口定义

如果一个类只由抽象方法和全局常量组成,那么这种情况下不会将其定义为一个抽象类。只会定义为一个接口,所以接口严格的来讲属于一个特殊的类,而这个类里面只有抽象方法和全局常量,就连构造方法也没有。

interface A{//定义一个接口 public static final String MSG = "hello";//全局常量 public abstract void print();//抽象方法,abstract可以省略 }

1.3、接口使用

由于接口里面存在抽象方法,所以接口对象不能直接使用关键字new进行实例化。

1.3.1、class 类名 [implements 接口1,接口2,…]{}

(1)接口必须要有子类,但此时一个子类可以使用implements关键字实现多个接口;

(2)接口的子类(如果不是抽象类),那么必须要重写接口中的全部抽象方法;

(3)接口的对象可以利用子类对象的向上转型进行实例化。

interface A{//定义一个接口A public static final String MSG = "hello";//全局常量 public abstract void print();//抽象方法 } interface B{//定义一个接口B public abstract void get(); } class X implements A,B{//X类实现了A和B两个接口 @Override public void print() { System.out.println("接口A的抽象方法print()"); } @Override public void get() { System.out.println("接口B的抽象方法get()"); } } public class TestDemo { public static void main(String[] args){ X x = new X();//实例化子类对象 A a = x;//向上转型 B b = x;//向上转型 a.print(); b.get(); } }

运行结果:

image20200111102442939.png

1.3.2、class 子类 [extends 父类] [implemetns 接口1,接口2,…] {}

对于子类而言,除了实现接口外,还可以继承抽象类。若既要继承抽象类,同时还要实现接口

interface A{//定义一个接口A public static final String MSG = "hello";//全局常量 public abstract void print();//抽象方法 } interface B{//定义一个接口B public abstract void get(); } abstract class C{//定义一个抽象类C public abstract void change(); } class X extends C implements A,B{//X类继承C类,并实现了A和B两个接口 @Override public void print() { System.out.println("接口A的抽象方法print()"); } @Override public void get() { System.out.println("接口B的抽象方法get()"); } @Override public void change() { System.out.println("抽象类C的抽象方法change()"); } }

2、接口与抽象类继承

2.1、接口的继承

在Java中,一个抽象类只能继承一个抽象类,但一个接口却可以使用extends关键字同时继承多个接口(但接口不能继承抽象类)。

interface A{ public void funA(); } interface B{ public void funB(); } //C接口同时继承了A和B两个接口 interface C extends A,B{//使用的是extends public void funC(); } class X implements C{ @Override public void funA() { } @Override public void funB() { } @Override public void funC() { } }

2.2、接口的继承与抽象类继承比较

(1)一个抽象类只能继承一个抽象父类,而接口可以继承多个接口;

abstract class A{} abstract class B extends A{}
interface A{} interface B{} interface X extends A,B{}

(2)一个子类只能继承一个抽象类,却可以实现多个接口(在Java中,接口的主要功能是解决单继承局限问题)

interface A{} interface B{} abstract class C{} class X extends C implements A,B{}

(3)从接口的概念上来讲,接口只能由抽象方法和全局常量组成,但是内部结构是不受概念限制的,正如抽象类中可以定义抽象内部类一样,在接口中也可以定义普通内部类、抽象内部类和内部接口(但从实际的开发来讲,用户自己去定义内部抽象类或内部接口的时候是比较少见的),范例如下,在接口中定义一个抽象内部类:

interface A{ public void funA(); abstract class B{//定义一个抽象内部类 public abstract void funB(); } } class X extends A.B { @Override public void funB() { } }
//在接口中如果使用了static去定义一个内接口,它表示一个外部接口: interface A{ public void funA(); static interface B{//使用了static,是一个外部接口 public void funB(); } } class X implements A.B { @Override public void funB() { } }

3、接口实际应用

在日常的生活之中,接口这一名词经常听到的,例如:USB接口、打印接口、充电接口等等。

如果要进行开发,要先开发出USB接口标准,然后设备厂商才可以设计出USB设备。

wpsWotApk.png

需求:现在假设每一个USB设备只有两个功能:安装驱动程序、工作。 定义一个USB的标准:

interface USB { // 操作标准 public void install() ; public void work() ; } //在电脑上应用此接口: class Computer { public void plugin(USB usb) { usb.install() ; usb.work() ; } } //定义USB设备—手机: class Phone implements USB { public void install() { System.out.println("安装手机驱动程序。") ; } public void work() { System.out.println("手机与电脑进行工作。") ; } } //定义USB设备—打印机: class Print implements USB { public void install() { System.out.println("安装打印机驱动程序。") ; } public void work() { System.out.println("进行文件打印。") ; } } //定义USB设备—MP3: class MP3 implements USB { public void install() { System.out.println("安装MP3驱动程序。") ; } public void work() { System.out.println("进行MP3拷贝。") ; } } //测试主类: public class TestDemo { public static void main(String args[]) { Computer c = new Computer() ; //传递具体的USB设备进接口 c.plugin(new Phone()) ; c.plugin(new Print()) ; c.plugin(new MP3()); } }

运行结果:

image20200111210544667.png

需要 登录 才可以提问哦