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

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

相关推荐
万物皆字节4 分钟前
maven指定模块快速打包idea插件Quick Maven Package
java
夜雨翦春韭11 分钟前
【代码随想录Day30】贪心算法Part04
java·数据结构·算法·leetcode·贪心算法
我行我素,向往自由17 分钟前
速成java记录(上)
java·速成
一直学习永不止步23 分钟前
LeetCode题练习与总结:H 指数--274
java·数据结构·算法·leetcode·数组·排序·计数排序
邵泽明24 分钟前
面试知识储备-多线程
java·面试·职场和发展
程序员是干活的37 分钟前
私家车开车回家过节会发生什么事情
java·开发语言·软件构建·1024程序员节
煸橙干儿~~1 小时前
分析JS Crash(进程崩溃)
java·前端·javascript
2401_854391081 小时前
Spring Boot大学生就业招聘系统的开发与部署
java·spring boot·后端
Amor风信子1 小时前
华为OD机试真题---跳房子II
java·数据结构·算法
杨荧1 小时前
【JAVA开源】基于Vue和SpringBoot的洗衣店订单管理系统
java·开发语言·vue.js·spring boot·spring cloud·开源