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 方法。

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

相关推荐
阿伟*rui2 小时前
配置管理,雪崩问题分析,sentinel的使用
java·spring boot·sentinel
XiaoLeisj4 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck4 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei4 小时前
java的类加载机制的学习
java·学习
Yaml46 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~6 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616886 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
aloha_7896 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
记录成长java7 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
睡觉谁叫~~~7 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust