Java-接口

时间:2020-02-23 14:36:39  来源:igfitidea点击:

在本教程中,我们将学习Java编程语言中的接口。

在上一教程中,我们了解了抽象以及如何创建抽象类。
随时检查一下。

什么是接口?

Java中的接口是具有静态常量和抽象方法的类。

它为我们提供了完整的抽象,即接口将实现部分留给了类。

如何创建接口?

我们使用关键字interface来创建Java接口。

接口语法

以下是接口的语法。

interface SomeName {
  retType methName(param_list);
  type varName = val;
}

其中," SomeName"是接口的名称。

methName是具有返回类型retType的方法的名称。
参数列表由param_list表示。

varName是静态常量,并分配有val值。

要记住的要点

  • 我们使用" interface"关键字创建接口。

  • 接口内部的方法都是抽象方法。

  • 接口内的变量都是静态最终常量。

范例1:

在下面的示例中,我们将创建一个接口" RandNum"。

它有一个getNumber()方法。

它具有两个整数常量" MAX"和" MIN"。

interface RandNum {

  int getNumber();
  int MAX = 10;
  int MIN = 1;

}

转换

在编译后在示例1中创建的接口" RandNum"将转换为以下内容。

interface RandNum {

  public abstract int getNumber();
  public static final int MAX = 10;
  public static final int MIN = 1;

}

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

接口中的所有变量都是静态最终常量。

实现接口

当类实现接口时,我们使用关键字" implements"。

语法

以下是实现接口的类的语法。

class ClName implements interface1 {
  //some code goes here...
}

其中," ClName"是类的名称,它正在实现接口" interface1"。

类可以实现多个接口

一个类也可以实现多个接口。
为此,我们列出了逗号分隔的接口名称。

以下是实现多个接口的类的语法。

class ClName implements interface1, interface2, interface3 {
  //some code goes here...
}

其中," ClName"是类的名称,它实现了三个接口" interface1"," interface2"和" interface3"。

范例2:

在下面的示例中,我们有一个类RandNumGenerator,它实现了RandNum接口。

class RandNumGenerator implements RandNum {
  
  /**
   * This method will return a random integer number.
   *
   * This method is from the interface RandNum.
   * It was abstract and now we are implementing it
   * inside this RandNumGenerator class.
   */
  public int getNumber() {

    /**
     * Using random method of the Math class to
     * get a random floating point number
     * greater than or equal to 0 and
     * less than 1.
     */
    double rand = Math.random();

    /**
     * MAX and MIN are the two static final constants
     * from the interface RandNum.
     *
     * We are using it here in this method to compute
     * an integer random number between MIN and Max
     * both inclusive.
     */
    double randNum = Math.floor((rand * MAX) + MIN);

    /**
     * Returning the random number.
     *
     * Since, the return type of this method is int
     * so, we are type-casting the value to int.
     */
    return (int)randNum;
  }

  /**
   * This will return the value stored in the
   * constant MAX from the RandNum interface.
   */
  public int getMAX() {
    return MAX;
  }

  /**
   * This will return the value stored in the
   * constant MIN from the RandNum interface.
   */
  public int getMIN() {
    return MIN;
  }

}

接口的部分实现

如果一个类没有完全实现接口,则必须将其声明为"抽象"类。

在下面的示例中,我们有一个Sample类,它没有完全实现RandNum接口。
因此,我们将其声明为抽象类。

abstract class Sample implements RandNum {
  
  public void greetings() {

    System.out.println("Hello from the Sample class...");

    /**
     * Note! the getNumber() method from the
     * interface RandNum is not implemented here
     * in this Sample class so, we have declared
     * this class as abstract.
     */
  }
  
}

完整代码:RandNum接口

/**
 * RandNum interface
 */
interface RandNum {

  int getNumber();
  int MAX = 10;
  int MIN = 1;

}

/**
 * RandNumGenerator class implementing
 * the RandNum interface.
 */
class RandNumGenerator implements RandNum {
  
  public int getNumber() {
    double rand = Math.random();
    double randNum = Math.floor((rand * MAX) + MIN);
    return (int)randNum;
  }

  public int getMAX() {
    return MAX;
  }

  public int getMIN() {
    return MIN;
  }

}

/**
 * main class
 */
public class Example {
  public static void main(String[] args) {
    //create object
    RandNumGenerator rngObj = new RandNumGenerator();

    //get a random number
    int n = rngObj.getNumber();

    //get max
    int max = rngObj.getMAX();

    //get min
    int min = rngObj.getMIN();

    //output
    System.out.println("Max: " + max);
    System.out.println("Min: " + min);
    System.out.println("Random number: " + n);
  }
}
Max: 10
Min: 1
Random number: 7