接口的学习笔记

来源:互联网 发布:朝鲜第五次核试验知乎 编辑:程序博客网 时间:2024/06/06 08:30

接口是java中唯一的多对一的特殊继承关系,但接口只能继承接口,不能继承类,接口的继承也能让子接口获得接口的所有常量,抽象方法。

接口中没有初始化块和构造器,只有成员变量,方法,和内部类;而接口中的成员变量默认是被public static final修饰的,既int a = 1;与 public static final int a = 1;是完全等效的,所以接口中的成员变量只能是静态常量。和变量一样,接口中的内部类、内部接口、内部枚举等也是默认被public static修饰的。接口中有三种方法:抽象方法、类方法和默认方法;其中类方法和默认方法都必须有方法体,三种方法都是默认使用public修饰的,其中抽象方法的修饰符abstract是可以省去的,但类方法的static不能省去,使用默认方法时也必须使用default修饰符。eg:

public interface INTERFACE1 {   }
public interface INTERFACE2 { }

public interface INTERFACE0 extends INTERFACE1, INTERFACE2 {//继承两个接口int a = 0;//a = 1;将出现错误,因为a是静态常量,不能第二次赋值void abstractmethod();//定义抽象方法        static void staticmethod()//定义默认方法        {            System.out.println("静态方法");        }default void defaultmethod()//定义默认方法{System.out.println("默认方法");}}

接口和抽象类是一样的,都不能创建实例,可以用接口声明引用变量,但当使用接口来声明引用变量时,这个引用变量必须引用到其实现类的对象。

接口的是用implements实现的,一个类可以实现多个接口,也可以在继承的时候实现接口,不过extends要在implemrnts之前。接口的实现和继承类似,都可以获得接口中的定义的局部变量(静态常量),方法(抽象,默认)。一个类在实现接口时,如果不把接口中所有的方法都实现,则要将类定义为抽象类。

eg:

接口1:

public interface INTERFACE1 {    static int number1 = 33;    static void s()    {        System.out.println("INTERFACE1 的类方法");    }    void ss();    default void sss()    {        System.out.println("INTERFACE1 的默认方法");    }}

接口2:

public interface INTERFACE2 {    int number2 = 22;    void ssss();}

类:

public class INTERFACE {    public static void main(String[] args){        INTERFACE1[] array = new INTERFACE1[2];//将接口当数据类型处理        array[0] = new SS();        SS.method(array[0]);                INTERFACE2 p;//用接口来声明变量        p = new SS();//引用到其实现类        p.ssss();// p[0].ssss();是错误的,因为sss()方法不是接口INTERFACE1中定义的            }}class SS implements INTERFACE1,INTERFACE2,Comparable<SS>{//Comparable接口,用于比较对象    private int A = INTERFACE1.number1 + INTERFACE2.number2;        public static void method(INTERFACE1 interface1)    {        INTERFACE1.s();//引用接口中的类方法        interface1.ss();//引用接口中的抽象方法        interface1.sss();//引用接口中的默认方法    }        @Override    public void ss() {        System.out.println("INTERFACE1 的抽象方法");    }    @Override    public void ssss() {        System.out.println("INTERFACE2 的抽象方法");    }    @Override    public int compareTo(SS o) {        return 0;    }}
输出结果为:

INTERFACE1 的类方法
INTERFACE1 的抽象方法
INTERFACE1 的默认方法
INTERFACE2 的抽象方法

有一种接口没有任何变量和方法,这种接口叫标记接口,例:Cloneable接口(克隆)。

0 0