Java基础-接口

193 阅读5分钟

接口

接口(Interface)是Java中定义行为规范的引用类型,通过interface关键字声明。它定义了一组方法签名(没有具体实现的方法),形成类与类之间的契约。

扩展:为什么需要接口?

  1. 实现多继承:突破Java单继承限制
  2. 完全解耦:定义标准,分离实现
  3. 动态扩展:方便添加新功能
  4. 多态支持:统一不同对象的操作方式

1.1 定义格式

//接口的定义格式:
interface 接口名称{
    // 抽象方法
}
​
// 接口的声明:interface
// 接口名称:首字母大写,满足“驼峰模式”

1.2 接口成分的特点

在JDK7,包括JDK7之前,接口中的只有包含:抽象方法和常量

1.2.1.抽象方法

注意:接口中的抽象方法默认会自动加上public abstract修饰程序员无需自己手写!! ​ 按照规范:以后接口中的抽象方法建议不要写上public abstract。因为没有必要啊,默认会加上。

1.2.2 常量

在接口中定义的成员变量默认会加上: public static final修饰。也就是说在接口中定义的成员变量实际上是一个常量。这里是使用public static final修饰后,变量值就不可被修改,并且是静态化的变量可以直接用接口名访问,所以也叫常量。常量必须要给初始值。常量命名规范建议字母全部大写,多个单词用下划线连接。

1.2.3 案例演示

public interface InterF {
    // 抽象方法!
    //    public abstract void run();
    void run();
​
    //    public abstract String getName();
    String getName();
​
    //    public abstract int add(int a , int b);
    int add(int a , int b);

}

2.1 基本的实现

2.1.1 实现接口的概述

类与接口的关系为实现关系,即类实现接口,该类可以称为接口的实现类,也可以称为接口的子类。实现的动作类似继承,格式相仿,只是关键字不同,实现使用 implements关键字。

2.1.2实现接口的格式

/**接口的实现:
    在Java中接口是被实现的,实现接口的类称为实现类。
    实现类的格式:*/
class 类名 implements 接口1,接口2,接口3...{
​
}

从上面格式可以看出,接口是可以被多实现的。大家可以想一想为什么呢?

2.1.3类实现接口的要求和意义

  1. 必须重写实现的全部接口中所有抽象方法。
  2. 如果一个类实现了接口,但是没有重写完全部接口的全部抽象方法,这个类也必须定义成抽象类。
  3. 意义:接口体现的是一种规范,接口对实现类是一种强制性的约束,要么全部完成接口申明的功能,要么自己也定义成抽象类。这正是一种强制性的规范。

2.1.4 类与接口基本实现案例

假如我们定义一个运动员的接口(规范),代码如下:

/**
   接口:接口体现的是规范。
 * */
public interface SportMan {
    void run(); // 抽象方法,跑步。
    void law(); // 抽象方法,遵守法律。
    String compittion(String project);  // 抽象方法,比赛。
}

接下来定义一个乒乓球运动员类,实现接口,实现接口的实现类代码如下:

package com.itheima._03接口的实现;
/**
 * 接口的实现:
 *    在Java中接口是被实现的,实现接口的类称为实现类。
 *    实现类的格式:
 *      class 类名 implements 接口1,接口2,接口3...{
 *
 *
 *      }
 * */
public class PingPongMan  implements SportMan {
    @Override
    public void run() {
        System.out.println("乒乓球运动员稍微跑一下!!");
    }
​
    @Override
    public void law() {
        System.out.println("乒乓球运动员守法!");
    }
​
    @Override
    public String compittion(String project) {
        return "参加"+project+"得金牌!";
    }
}

测试代码

public class TestMain {
    public static void main(String[] args) {
        // 创建实现类对象。
        PingPongMan zjk = new PingPongMan();
        zjk.run();
        zjk.law();
        System.out.println(zjk.compittion("全球乒乓球比赛"));
​
    }
}

2.1.5 类与接口的多实现案例

类与接口之间的关系是多实现的,一个类可以同时实现多个接口。

首先我们先定义两个接口,代码如下:

/** 法律规范:接口*/
public interface Law {
    void rule();
}
​
/** 这一个运动员的规范:接口*/
public interface SportMan {
    void run();
}
​

然后定义一个实现类:

/**
 * Java中接口是可以被多实现的:
 *    一个类可以实现多个接口: Law, SportMan
 *
 * */
public class JumpMan implements Law ,SportMan {
    @Override
    public void rule() {
        System.out.println("尊长守法");
    }
​
    @Override
    public void run() {
        System.out.println("训练跑步!");
    }
}

从上面可以看出类与接口之间是可以多实现的,我们可以理解成实现多个规范,这是合理的。

3.1 接口与接口的多继承

Java中,接口与接口之间是可以多继承的:也就是一个接口可以同时继承多个接口。大家一定要注意:

类与接口是实现关系

接口与接口是继承关系

接口继承接口就是把其他接口的抽象方法与本接口进行了合并。

案例演示:

public interface Abc {
    void go();
    void test();
}
​
/** 法律规范:接口*/
public interface Law {
    void rule();
    void test();
}
​
 *
 *  总结:
 *     接口与类之间是多实现的。
 *     接口与接口之间是多继承的。
 * */
public interface SportMan extends Law , Abc {
    void run();
}

总结

随着Java版本更新,接口功能不断增强,开发者可以更灵活地使用接口进行系统设计。掌握接口的进阶用法(如默认方法、静态方法),能够编写出更简洁、更易维护的面向对象代码。在实际开发中,建议遵循"面向接口编程"原则,结合设计模式,构建高扩展性的系统架构。