Java笔记丨15 接口

接口,某种特征的约定

定义接口interface

所有的方法都自动是public abstract

实现接口implements

可以实现多继承

与类的继承关系无关

面向接口编程,而不是面向实现

Flyable f = new bird();

Java中有大量的接口

 

接口的作用

1.通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。从而在一定意义上实现了多重继承

2.通过接口可以指明多个类需要实现的方法

3.通过接口可以了解对象的交互界面,而不需了解对象所对应的类

示例:

interface Collection{

       void add(Object obj);

       void delete(Object obj);

       Object find(Object obj);

       int size();

}

通常接口以able或ible结尾,表明接口可以完成一定的行为。

接口声明中还可以包括对接口的访问权限以及它的父接口列表。完整的接口声明如下:

[public]interface interfaceName[extends listOfSuperInterface]{

……

}

其中public指明任意类均可以使用这个接口,缺省的情况下,只有与该接口位于同一个包中的类才可以访问这个接口

extends子句与类声明中的extends子句基本相同,不同的是一个接口可以有多个父接口,用逗号隔开,而一个类只能有一个父类。子接口继承父接口中所有的常量和方法。

方法的定义格式为:

returnType methodName([paramlist]);

接口中只进行方法的声明,而不提供方法的实现,所以,方法定义没有方法体,且用分号结尾。在接口中声明的方法具有public和abstract属性。所有在定义时,这两个关键词可以省略。

另外,如果在子接口中定义了和父类接口同名的常量或相同的方法,则父接口中的常量被隐藏,方法被重载。

 

接口的实现

在类的声明中用implements子句来表示一个类使用某个接口,在类体重可以使用接口中定义的常量,而且必须实现接口中定义的所有方法。一个类可以实现多个接口。

下面在类FIFOQueue类中实现上面定义的接口collection:

class FIFOQueue implements collection{

public void add(Object obj){

……

}

public void delete(Object obj){

……

}

public Object find(Object obj){

……

}

public int currentCount{

……

}

在类中实现接口所定义的方法时,方法的声明必须与接口中所定义的完全一致。

 

接口类型

接口可以作为一种引用类型来使用。任何实现该接口的类的实例都可以存储在该接口类型的变量中,通过这些变量可以访问类所实现的接口中的方法。Java运行时系统动态地确定该使用哪个类中的方法。

把接口作为一种数据类型可以不需要了解对象所对应的具体的类,以前面所定义的接口Collection和实现该类FIFOQueue为例,下例中,我们以Collection作为引用类型来使用。

class InterfaceType{

    public static void main(String args[]){

        Collection c=new FIFOQueue();

        ……

        c.add(obj);

        ……

    }

}

接口中的常量

接口体中可以包含常量定义

常量定义的格式为:

type NAME=value;

其中type可以是任意类型,NAME是常量名,通常大写,value是常量值。

在接口中定义的常量可以被实现该接口的多个类共享,它与C中用#define已经C++中用const定义的常量是相同的。

在接口中定义的常量具有public,static,final属性,定义时可省略。

 

枚举

从JDK1.5起,可以使用枚举

enum Light{Red,Yellow,Green}

使用

Light light=Light.Red;

switch(light){case Red:……break;}

注意:case后面不能写成Light.Red

Java中的枚举是用class来实现的,可以复杂地使用

 

Java8中的接口

Java8以上,接口成员还可以是:

static方法

具有实现体的方法(default方法)

默认方法的好处是:提供了一个默认实现,子类在implements可以不用再重新写

猜你喜欢

转载自blog.csdn.net/qq_42968048/article/details/84541952