Java接口:用于实现各种动态功能

  • 👑专栏内容:Java
  • ⛪个人主页:子夜的星的主页
  • 💕座右铭:前路未远,步履不停

目录


1、接口概念

在现实生活中,接口的例子比比皆是,比如:笔记本上的USB口,电源插座等。电脑的USB口上,可以插:U盘、鼠标、键盘等所有符合USB协议的设备。接口其实就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型。

接口,也可以进一步看成是抽象类的进一步抽象。接口的定义格式与定义类的格式基本相同,将class关键字换成 interface 关键字,就定义了一个接口。

java 复制代码
//
interface IShape{
    public abstract void draw();

    public static void draw3() {
        System.out.println("1234");
    }
}
//
class Cycle implements IShape{
    @Override
    public void draw() {
        System.out.println("⭕");
    }
}
public class Test {
    public static void drawMap(IShape iShape){
        iShape.draw();
    }
    public static void main(String[] args) {
        Cycle cycle = new Cycle();
        drawMap(new Cycle());
    }
}

提示:

  1. 创建接口时, 接口的命名一般以大写字母 I 开头
  2. 接口的命名一般使用 "形容词" 词性的单词
  3. 阿里编码规范中约定, 接口中的方法和属性不要加任何修饰符号, 保持代码的简洁性

接口中,不能有实现的方法,但是有2种类型的方法需要注意:

  1. 静态方法可以有具体的实现
  2. 这个方法被default关键字修饰,也是可以的。

注意事项:

  1. 接口是使用interface来定义的
  2. 接口当中的方法默认是public abstract修饰的
  3. 接口中的成员变量默认是public static final修饰的
  4. 接口也不能通过关键字new来进行实例化
  5. 类和接口之间,我们使用关键字implements来进行关联
  6. 当一个类实现一个接口后,这个类必须重写这个接口种的抽象方法
  7. 当接口当中存在default方法,可以选择重写,也可以选择不重写
  8. 一个类不想实现接口中的方法,这个类可以被定义为抽象类

2、实现一个接口

定义一个接口 Flying,里面包含一个飞行的方法。

java 复制代码
public interface Flying {
    // 接口中的方法 fly
    void fly();
}

实现接口的一个类 Bird

java 复制代码
public class Bird implements Flying {
    // 实现接口方法 'fly'
    @Override
    public void fly() {
        System.out.println("The bird is flying");
    }
}

3、实现多个接口

在Java中,类和类之间是单继承的,一个类只能有一个父类,即Java中不支持多继承,但是一个类可以实现多个接口。一个类实现多个接口,可以解决多继承的问题。

下面通过类来表示一组动物。

java 复制代码
class Animal {
    protected String name;
    public Animal(String name) {
    	this.name = name;
    }
}

另外我们再提供一组接口, 分别表示 "会飞的", "会跑的", "会游泳的"。这三个接口,每个接口代表的功能是不一样的。

java 复制代码
interface IFlying {
	void fly();
}
interface IRunning {
	void run();
}
interface ISwimming {
	void swim();
}

接下来我们创建几个具体的动物,注意要先继承类再实现接口。

猫,是会跑的

java 复制代码
class Cat extends Animal implements IRunning {
    public Cat(String name) {
    super(name);
}
    @Override
    public void run() {
    System.out.println(this.name + "正在用四条腿跑");
	}
}

鱼,是会游泳的

java 复制代码
class Fish extends Animal implements ISwimming {
    public Fish(String name) {
    	super(name);
}
    @Override
    public void swim() {
    System.out.println(this.name + "正在用尾巴游泳");
    }
}

青蛙, 是既能跑, 又能游的

java 复制代码
class Frog extends Animal implements IRunning, ISwimming {
    public Frog(String name) {
    	super(name);
}
    @Override
    public void run() {
    	System.out.println(this.name + "正在往前跳");
    }
    @Override
    public void swim() {
    	System.out.println(this.name + "正在蹬腿游泳");
    }
}

注意:一个类实现多个接口时,每个接口中的抽象方法都要实现,否则类必须设置为抽象类

上面的代码展示了 Java 面向对象编程中最常见的用法:一个类继承一个父类, 同时实现多种接口。继承表达的含义是 is-a语义, 而接口表达的含义是 具有 xxx特性

猫是一种动物, 具有会跑的特性.
青蛙也是一种动物, 既能跑, 也能游泳
鸭子也是一种动物, 既能跑, 也能游, 还能飞

这样设计有什么好处呢? 时刻牢记多态的好处, 让程序猿忘记类型。有了接口之后, 类的使用者就不必关注具体类型,而只关注某个类是否具备某种能力。
例如, 现在实现一个方法, 叫 "散步"

java 复制代码
public static void walk(IRunning running) {
    System.out.println("我带着伙伴去散步");
    running.run();
}

在这个 walk 方法内部, 我们并不关注到底是哪种动物, 只要参数是会跑的, 就行

java 复制代码
Cat cat = new Cat("小猫");
walk(cat);
Frog frog = new Frog("小青蛙");
walk(frog);

4、接口间的继承

在Java中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承。即:用接口可以达到多继承的目的。接口可以继承一个接口,使用 extends 关键字,达到复用的效果。

java 复制代码
interface IRunning {
    void run();
    }
interface ISwimming {
    void swim();
}
// 两栖的动物, 既能跑, 也能游
interface IAmphibious extends IRunning, ISwimming {
    
}

通过接口继承创建一个新的接口 IAmphibious 表示 "两栖的"。此时实现接口就继续要实现 run 方法, 也需要实现 swim 方法。

接口间的继承相当于把多个接口合并在一起

相关推荐
凤山老林10 分钟前
从0到1搭建企业级权限管理系统:Spring Boot + JWT + RBAC实战指南
java·spring boot·后端·权限管理·rbac
逍遥德19 分钟前
AI时代,计算机专业大学生学习指南
java·javascript·人工智能·学习·ai编程
Maiko Star37 分钟前
让 AI 开口说话:Spring AI Alibaba 语音合成(TTS)实战
java·人工智能·spring·springai
programhelp_1 小时前
Pinterest OA 题库大公开|Programhelp 独家整理(最新高频)
java·开发语言
likerhood2 小时前
Fastjson中的JSON.parseObject()详细讲解
java·json
KNeeg_2 小时前
黑马点评完整代码(RabbitMQ优化)+简历编写+面试重点 ⭐
java·redis·后端·spring·面试·职场和发展·黑马点评
铁皮哥2 小时前
【后端/Agent 开发】给你的项目配置一套 .claude/ 工作流:别再裸用 Claude Code 了!
java·windows·python·spring·github·maven·生活
乐之者v2 小时前
AI编程 -- codex添加代码,在intellij Idea中没有显示,如何处理?
java·ide·intellij-idea
2401_878820473 小时前
Sa-Token基础篇
java·spring boot·后端·sa-token
2301_816374333 小时前
Nginx下构建PC站点
java·运维·nginx