Java 接口

Java 接口

接口是Java中的一个引用类型。它类似于类。它是一组抽象方法的集合。一个类实现了一个接口,从而继承了接口的抽象方法。

除了抽象方法,接口还可以包含常量、默认方法、静态方法和嵌套类型。方法体只存在于默认方法和静态方法中。

编写一个接口类似于编写一个类。但是类描述的是对象的属性和行为,而接口包含的是类实现的行为。

除非实现接口的类是抽象类,否则需要在类中定义接口的所有方法。

接口与类类似,有以下相似之处-

  • 接口可以包含任意数量的方法。

  • 接口以 .java 扩展名的文件中书写,接口的名称与文件名相匹配。

  • 接口的字节码出现在一个 .class 文件中。

  • 接口出现在包中,其对应的字节码文件必须在与包名匹配的目录结构中。

然而,接口与类在许多方面不同,包括-

  • 您不能实例化一个接口。

  • 接口不包含任何构造函数。

  • 接口中的所有方法都是抽象的。

  • 接口不能包含实例字段。只有声明为静态和final的字段才能出现在接口中。

  • 接口不被类扩展;它是由类实现的。

  • 接口可以扩展多个接口。

声明接口

interface 关键字用于声明一个接口。下面是一个简单的接口声明示例-

示例

下面是一个接口的示例-

/* File name : NameOfInterface.java */
import java.lang.*;
// Any number of import statements

public interface NameOfInterface {
   // Any number of final, static fields
   // Any number of abstract method declarations\
}

接口具有以下特性。

  • 接口是隐式地抽象的。在声明接口时,您不需要使用 abstract 关键字。

  • 接口中的每个方法也是隐式地抽象的,因此不需要使用 abstract 关键字。

  • 接口中的方法默认是公共的。

示例

/* File name : Animal.java */
interface Animal {
   public void eat();
   public void travel();
}

实现接口

当一个类实现一个接口时,你可以将这个类视为签署一个合同,同意执行接口的具体行为。如果一个类不能执行接口的所有行为,则该类必须声明为抽象类。

一个类使用 implements 关键字来实现一个接口。implements关键字出现在类声明中,跟随声明的extends部分之后。

示例

/* File name : MammalInt.java */
public class MammalInt implements Animal {

   public void eat() {
      System.out.println("Mammal eats");
   }

   public void travel() {
      System.out.println("Mammal travels");
   } 

   public int noOfLegs() {
      return 0;
   }

   public static void main(String args[]) {
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}

这将产生以下结果 −

输出

Mammal eats
Mammal travels

在覆盖接口定义的方法时,需要遵循以下几个规则:

  • 除了接口方法声明的方法或接口方法声明的子类,实现方法中不应声明检查异常。

  • 覆盖方法时,应该保持接口方法的签名和相同的返回类型或子类型。

  • 实现类本身可以是抽象的,如果是这样,接口方法不需要实现。

在实现接口时,需要遵循以下几个规则:

  • 一个类可以同时实现多个接口。

  • 一个类只能继承一个类,但可以实现多个接口。

  • 接口可以像类一样扩展另一个接口。

扩展接口

接口可以像类一样扩展另一个接口。使用 extends 关键字扩展接口,子接口继承父接口的方法。

以下是Sports接口由Hockey和Football接口扩展的示例。

示例

// Filename: Sports.java
public interface Sports {
   public void setHomeTeam(String name);
   public void setVisitingTeam(String name);
}

// Filename: Football.java
public interface Football extends Sports {
   public void homeTeamScored(int points);
   public void visitingTeamScored(int points);
   public void endOfQuarter(int quarter);
}

// Filename: Hockey.java
public interface Hockey extends Sports {
   public void homeGoalScored();
   public void visitingGoalScored();
   public void endOfPeriod(int period);
   public void overtimePeriod(int ot);
}

Hockey接口有四个方法,但它从Sports继承了两个方法;因此,实现Hockey的类需要实现所有六个方法。同样地,实现Football的类需要定义Football的三个方法和Sports的两个方法。

多接口扩展

一个Java类只能扩展一个父类,不允许多重继承。然而,接口不是类,一个接口可以扩展多个父接口。

extends关键字只能使用一次,并且父接口在一个逗号分隔的列表中声明。

例如,如果Hockey接口同时扩展了Sports和Event接口,应该声明为−

示例

public interface Hockey extends Sports, Event

标记接口

当父接口不包含任何方法时,扩展接口最常见的用法是。举个示例,在java.awt.event包中,MouseListener接口扩展了java.util.EventListener,它被定义为:

示例

package java.util;
public interface EventListener
{}

没有任何方法的接口被称为 标记 接口。标记接口有两个基本设计目的:

创建共同的父接口 - 像EventListener接口一样,它被Java API中的许多其他接口扩展,您可以使用标记接口在一组接口中创建共同的父接口。例如,当一个接口扩展EventListener时,JVM知道此特定接口将在事件委托场景中使用。

向类添加数据类型 - 这种情况就是标记这个术语的来源。实现标记接口的类不需要定义任何方法(因为接口没有任何方法),但是通过多态性,该类成为接口类型。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程