关于Java接口使用总结

来源:互联网 发布:win10怎么改电脑端口 编辑:程序博客网 时间:2024/04/26 00:23

定义

抽象类是从多个类中抽象出来的模板,如果将这种抽象进行得更彻底,则可以提炼出一种更加特殊的”抽象类“——接口(interface)。

接口里不能有普通方法,接口里的所有方法都是抽象方法。

Java 8对接口进行了改进,允许在接口中定义默认方法,默认方法可以提供方法实现。

规则

1、 接口名应该与类名采用相同的命名规则;

2、 一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类;

3、 由于接口定义的是一种规范,因此接口里不能包含构造器和初始化块定义。接口里可以包含成员变量(只能是静态常量)、方法(只能是抽象方法、类方法或默认方法)、内部类(包括内部接口、枚举)定义;

4、 在接口中定义成员变量时,不管是否使用public static final修饰符,接口里的成员变量总是使用这三个修饰符来修饰。而且接口里没有构造器和初始化块,因此接口里定义的成员变量只能在定义时指定默认值;

5、Java 8允许在接口里定义默认方法,默认方法必须使用default修饰,该方法不能使用static修饰,无论程序是否指定,默认方法总是使用public修饰——如果开发者没有指定public,系统会自动为默认方法添加public修饰符,由于默认方法没有static修饰,因此不能直接使用接口来调用默认方法,需要使用接口的实现类的实例来调用这些默认方法;

6、Java 8允许在接口中定义类方法,类方法必须使用static修饰,该方法不能使用default修饰,无论程序是否指定,类方法总是使用public修饰——如果没有指定public,系统会自动为类方法添加public修饰符。类方法可以直接使用接口来调用;

7、接口里的成员默认是使用public static final修饰的,因此即使另一个类处于不同包下,也可以通过接口来访问接口里的成员变量;

注意:
从某个角度来看,接口可被当成一个特殊的类,因此一个Java源文件里最多只能有一个public接口,如果一个Java源文件里定义了一个public接口,则该源文件的主文件名必须与该接口名相同。

public interface Output{    //接口里定义的成员变量只能是常量    int MAX_CACHE_LINE = 50;    //接口里定义的普通方法只能是public的抽象方法    void out();    void getData(String msg);    //在接口里定义默认方法,需要使用default修饰    default void print(String... msgs)    {        for(String msg : msgs)        {            System.out.println(msg);        }    }    //在接口中定义默认方法,需要使用default修饰    default void test()    {        System.out.println("默认的test()方法");    }    //在接口中定义类方法,需要使用static修饰    static String staticTest()    {        return "接口里的类方法";    }}

8、接口的继承和类继承不一样,接口完全支持多继承,即一个接口可以有多个直接父接口。和类继承相似,子接口扩展某个父接口,将会获得父接口里定义的所有方法、常量;

9、一个接口继承多个父接口时,多个父接口排在extends关键字之后,多个父接口之间以(,)隔开;

10、一个类只能有一个直接父类,包括抽象类;但一个类可以实现多个接口,通过实现多个接口可以弥补Java单继承的不足;

interface interfaceA{    int PROP_A = 5;    void testA();}interface interfaceB{    int PROP_B = 6;    void testB();}interface interfaceC extends interfaceA , interfaceB{    int PROP_C = 7;    void testC();}public class InterfaceExtendsTest{    public static void main(String[] args)    {        System.out.println(interface.PROP_A);        System.out.println(interface.PROP_B);        System.out.println(interface.PROP_C);    }}

接口用途

①定义变量,也可用于进行强制类型转换;

②调用接口中定义的变量;

③被其他类实现;