加入收藏 | 设为首页 | 会员中心 | 我要投稿 大连站长网 (https://www.0411zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Java接口 Interface 的定义和实现

发布时间:2022-07-10 23:17:03 所属栏目:语言 来源:互联网
导读:抽象类是从多个类中抽象出来的模板,如果将这种抽象进行的更彻底,则可以提炼出一种更加特殊的抽象类接口(Interface)。接口是 Java 中最重要的概念之一,它可以被理解为一种特殊的类,不同的是接口的成员没有执行体,是由全局常量和公共的抽象方法所组成
  抽象类是从多个类中抽象出来的模板,如果将这种抽象进行的更彻底,则可以提炼出一种更加特殊的“抽象类”——接口(Interface)。接口是 Java 中最重要的概念之一,它可以被理解为一种特殊的类,不同的是接口的成员没有执行体,是由全局常量和公共的抽象方法所组成。
  定义接口
  Java 接口的定义方式与类基本相同,不过接口定义使用的关键字是 interface,接口定义的语法格式如下:
  [public] interface interface_name [extends interface1_name[, interface2_name,…]] {
      // 接口体,其中可以包含定义常量和声明方法
      [public] [static] [final] type constant_name = value;    // 定义常量
      [public] [abstract] returnType method_name(parameter_list);    // 声明方法
  }
  对以上语法的说明如下:
  public 表示接口的修饰符,当没有修饰符时,则使用默认的修饰符,此时该接口的访问权限仅局限于所属的包;
  interface_name 表示接口的名称。接口名应与类名采用相同的命名规则,即如果仅从语法角度来看,接口名只要是合法的标识符即可。如果要遵守 Java 可读性规范,则接口名应由多个有意义的单词连缀而成,每个单词首字母大写,单词与单词之间无需任何分隔符。
  extends 表示接口的继承关系;
  interface1_name 表示要继承的接口名称;
  constant_name 表示变量名称,一般是 static 和 final 型的;
  returnType 表示方法的返回值类型;
  parameter_list 表示参数列表,在接口中的方法是没有方法体的。
  注意:一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类。
  Java接口 Interface 的定义和实现
  接口对于其声明、变量和方法都做了许多限制,这些限制作为接口的特征归纳如下:
  具有 public 访问控制符的接口,允许任何类使用;没有指定 public 的接口,其访问将局限于所属的包。
  方法的声明不需要其他修饰符,在接口中声明的方法,将隐式地声明为公有的(public)和抽象的(abstract)。
  在 Java 接口中声明的变量其实都是常量,接口中的变量声明,将隐式地声明为 public、static 和 final,即常量,所以接口中定义的变量必须初始化。
  接口没有构造方法,不能被实例化。例如:
  public interface A {
      publicA(){…}    // 编译出错,接口不允许定义构造方法
  }
  一个接口不能够实现另一个接口,但它可以继承多个其他接口。子接口可以对父接口的方法和常量进行重写。例如:
  public interface StudentInterface extends PeopleInterface {
      // 接口 StudentInterface 继承 PeopleInterface
      int age = 25;    // 常量age重写父接口中的age常量
      void getInfo();    // 方法getInfo()重写父接口中的getInfo()方法
  }
  例如,定义一个接口 MyInterface,并在该接口中声明常量和方法,如下:
  public interface MyInterface {    // 接口myInterface
      String name;    // 不合法,变量name必须初始化
      int age = 20;    // 合法,等同于 public static final int age = 20;
      void getInfo();    // 方法声明,等同于 public abstract void getInfo();
  }
  实现接口
  接口的主要用途就是被实现类实现,一个类可以实现一个或多个接口,继承使用 extends 关键字,实现则使用 implements 关键字。因为一个类可以实现多个接口,这也是 Java 为单继承灵活性不足所作的补充。类实现接口的语法格式如下:
  <public> class <class_name> [extends superclass_name] [implements interface1_name[, interface2_name…]] {
      // 主体
  }
  对以上语法的说明如下:
  public:类的修饰符;
  superclass_name:需要继承的父类名称;
  interface1_name:要实现的接口名称。
 
  实现接口需要注意以下几点:
  实现接口与继承父类相似,一样可以获得所实现接口里定义的常量和方法。如果一个类需要实现多个接口,则多个接口之间以逗号分隔。
  一个类可以继承一个父类,并同时实现多个接口,implements 部分必须放在 extends 部分之后。
  一个类实现了一个或多个接口之后,这个类必须完全实现这些接口里所定义的全部抽象方法(也就是重写这些抽象方法);否则,该类将保留从父接口那里继承到的抽象方法,该类也必须定义成抽象类。
  例 1
  在程序的开发中,需要完成两个数的求和运算和比较运算功能的类非常多。那么可以定义一个接口来将类似的功能组织在一起。下面创建一个示例,具体介绍接口的实现方式。
 
  1)创建一个名称为 IMath 的接口,代码如下:
  public interface IMath {
      public int sum();    // 完成两个数的相加
      public int maxNum(int a,int b);    // 获取较大的数
  }
  2)定义一个 MathClass 类并实现 IMath 接口,MathClass 类实现代码如下:
  public class MathClass implements IMath {
      private int num1;    // 第 1 个操作数
      private int num2;    // 第 2 个操作数
      public MathClass(int num1,int num2) {
          // 构造方法
          this.num1 = num1;
          this.num2 = num2;
      }
      // 实现接口中的求和方法
      public int sum() {
          return num1 + num2;
      }
      // 实现接口中的获取较大数的方法
      public int maxNum(int a,int b) {
          if(a >= b) {
              return a;
          } else {
              return b;
          }
      }
  }
  在实现类中,所有的方法都使用了 public 访问修饰符声明。无论何时实现一个由接口定义的方法,它都必须实现为 public,因为接口中的所有成员都显式声明为 public。
 
  3)最后创建测试类 NumTest,实例化接口的实现类 MathClass,调用该类中的方法并输出结果。该类内容如下:
  public class NumTest {
      public static void main(String[] args) {
          // 创建实现类的对象
          MathClass calc = new MathClass(100, 300);
          System.out.println("100 和 300 相加结果是:" + calc.sum());
          System.out.println("100 比较 300,哪个大:" + calc.maxNum(100, 300));
      }
  }
  程序运行结果如下所示。
  100 和 300 相加结果是:400
  100 比较 300,哪个大:300
  在该程序中,首先定义了一个 IMath 的接口,在该接口中只声明了两个未实现的方法,这两个方法需要在接口的实现类中实现。在实现类 MathClass 中定义了两个私有的属性,并赋予两个属性初始值,同时创建了该类的构造方法。因为该类实现了 MathClass 接口,因此必须实现接口中的方法。在最后的测试类中,需要创建实现类对象,然后通过实现类对象调用实现类中的方法。

(编辑:大连站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!