接口interface

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口interface相关的知识,希望对你有一定的参考价值。

接口

接口可以理解为一种更为抽象的抽象类,是抽象类的一种特殊形式,抽象类中可以定义不是抽象方法的一般方法(有方法体的方法),可以让子类直接继承使用,而接口中只能定义抽象方法,不能有一般方法,只能创建子类子类实例化使用。

接口的定义

接口也是一种特殊的类,但是接口的定义关键字不是class,需要用interface(接口)关键字来定义

定义格式:

public interface 接口名{

         抽象方法1

         抽象方法2

         抽象方法3

         ……

}

接口中的抽象方法也是有固定的定义格式的:

public abstract 返回值类型 方法名(参数列表);

接口方法的修饰符必须为public,如果不写默认也是public,不是default

接口的成员变量的定义也是有要求的:

public static final(最终的) 数据类型 变量名 = ;

接口中定义的成员变量全部都是常量,定义后就不可改变。

类实现接口

类与类之间是继承的关系,子类继承了父类,类与接口之间就不是继承关系了,而是实现关系,类实现了接口,这个类可以看成是子类,准确来说应该是实现类。

定义了接口,就需要定义另一个类去实现这个接口,重写接口的方法,需要用到一个关键字implements(实现)去实现接口,用一段代码来演示接口的实现:

l  接口类

package cn.itcast.intreface接口;
/*
 * 定义接口
 * 定义成员变量和抽象方法
 */
public interface Interface {
   //定义成员变量,其实在接口中定义的变量都是常量
   //int a = 1;
   //写全之后是这种格式
   public static final int a = 1;
   //定义抽象方法,用于实现类的方法重写
   public abstract void fuction(); 
}


l  实现接口类

package cn.itcast.intreface接口;
/*
 * 实现类,实现接口
 * 重写接口的方法
 */
public class ImplementsInterface implements Interface{
   //重写接口方法
   public void fuction(){
      System.out.println("类重写了接口中的方法");
   }
}


l  测试类

package cn.itcast.intreface接口;
/*
 * 测试类;测试接口的实现
 */
public class Test {
   public static void main(String[] args) {
      //创建实现接口类ImplementsInterface的对象
      ImplementsInterface imp = new ImplementsInterface();
      imp.fuction();
   }
}


接口中成员的特点

1、成员变量的特点:其实在接口中该变量已经不是变量了,而是常量,它的值是不可以被改变的。

成员变量的定义格式(固定)public static final 数据类型 变量名 = ;

public      权限最大

static      static修饰的成员都可以通过类名点直接调用该成员

final         最终的,被它修饰的成员不可被修改

注意:这三个修饰符可写可不写,它都是默认存在的。

2、成员方法的特点:

抽象方法的格式(固定):public abstract 返回值类型 方法名();

接口中方法的public abstract 修饰符也是可写可不写,都是默认存在的。

注意:接口中的抽象方法,在实现类中必须全部进行重写。

接口的多实现

java中是不允许多继承的,但是可以允许接口的多实现,定义两个接口,实现类继承两个接口,这是允许的,但是必须要将两个接口中的抽象方法全部进行重写。如下:

//接口A

public interface A{

         public abstract void a();

}

//接口B

public interface B{

         public abstract void b();

}

//实现类C,进行多实现,重写接口中的所有方法

public class C implements A,B{

         public void a(){}

         public void b(){}

}

类继承类实现多接口

一个类可以继承一个父类同时实现多个接口,如下:

//接口A

public interface A{

         public abstract void a();

}

//接口B

public interface B{

         public abstract void b();

}

//父类D

public class D{

         public void d(){}

}

//实现类C,进行多实现,重写接口中的所有方法

public class C extends D implements A,B{

         public void a(){}

         public void b(){}

         public void d(){}

}

接口中的多继承

java中类之间是不能有多继承的,但是接口之间可以进行多继承,如下:

//接口A

public interface A{

         public abstract void a();

}

//接口B

public interface B{

         public abstract void b();

}

/*

接口C,继承接口A,B

重写接口中所有的方法

*/

public interface C entends A,B{

         public void a(){}

         public void b(){}

}

接口的好处

1、 增强了扩展性

2、 借口就是暴露出来的规则

3、 接口降低了耦合性

接口和抽象类的区别

相同点:

1、 都属于继承的顶端被其他类继承或者实现

2、 都需要重写其父类和接口的方法

3、 接口和抽象类都不能实例化对象,需要子类重写方法创建子类对象进行实现

区别:

1、 抽象类可以重写一部分方法,其他方法可以直接继承使用,接口必须重写所有的方法

2、 一个类只能继承一个直接父类,但是接口可以实现多个,解决了单继承的问题

3、 抽象类是这个事物应该具备的功能,接口是这个事物可以具备的额外功能

二者优先考虑接口的使用,需要为子类提供共性的内容选择抽象类


以上是关于接口interface的主要内容,如果未能解决你的问题,请参考以下文章

0507 构造代码块和static案例,接口interface

如何在嵌套片段内的两个子片段之间进行通信

PHP interface(接口)的示例代码

Interface/接口

TypeScript Interface(接口)

TypeScript 接口(interface)