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

在这里插入图片描述

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

目录

  • 1、接口概念
  • 2、实现一个接口
  • 3、实现多个接口
  • 4、接口间的继承


1、接口概念

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

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

//
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,里面包含一个飞行的方法。

public interface Flying {
    // 接口中的方法 fly
    void fly();
}

实现接口的一个类 Bird

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

3、实现多个接口

在Java中,类和类之间是单继承的,一个类只能有一个父类,即Java中不支持多继承,但是一个类可以实现多个接口。一个类实现多个接口,可以解决多继承的问题。
下面通过类来表示一组动物。

class Animal {
    protected String name;
    public Animal(String name) {
    	this.name = name;
    }
}

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

interface IFlying {
	void fly();
}
interface IRunning {
	void run();
}
interface ISwimming {
	void swim();
}

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

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

鱼,是会游泳的

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

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

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特性

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

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

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

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

Cat cat = new Cat("小猫");
walk(cat);
Frog frog = new Frog("小青蛙");
walk(frog);

4、接口间的继承

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

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

通过接口继承创建一个新的接口 IAmphibious 表示 “两栖的”。此时实现接口就继续要实现 run 方法, 也需要实现 swim 方法。
接口间的继承相当于把多个接口合并在一起

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/225519.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java接口自动化测试框架及断言详解

在上篇文章,我们介绍了Get方法的设计过程和测试结果,现在我们需要对前面代码进行重构和修改,本篇需要完成以下目标。 1)重构Get方法2)如何进行JSON解析3)使用TestNG方法进行测试断言 1.重构Get方法 在前…

家政小程序源码,师傅竞价接单

家政预约上门服务小程序开发方案,php开发语言,前端是uniapp,有成品源码,可以二开,可以定制。 一家政小程序用户端功能:服务分类、在线预约、在线下单。 师傅端:在线接单,竞价&…

算法初阶双指针+C语言期末考试之编程题加强训练

双指针 常⻅的双指针有两种形式,⼀种是对撞指针,⼀种是左右指针。 对撞指针:⼀般⽤于顺序结构中,也称左右指针。 • 对撞指针从两端向中间移动。⼀个指针从最左端开始,另⼀个从最右端开始,然后逐渐往中间逼…

哥尼斯堡的“七桥问题”——欧拉回路

哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示。 可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Euler,1707—1783)最终解决了这个问题,并由此创立…

Pacifist:一款专为技术开发者打造的软件提取工具

对于技术开发者而言,有效且便捷的工具可以显著提高工作效率。Pacifist,作为一款专业的软件提取工具,专为技术开发者而设计,旨在提供简单、安全的软件提取和管理工作。 一、Pacifist的技术特点 Pacifist主要采用AppleScript作为其…

ROS小练习——话题订阅

目录 一、话题与消息获取 二、代码编写 1、C 2、python 三、编译运行 一、话题与消息获取 rostopic list rostopic type /turtle1/pose rosmsg info turtlesim/Pose 二、代码编写 1、C //包含头文件 #include "ros/ros.h" #include "turtlesim/Pose…

js vue 输入正确手机号/邮箱后,激活“发送验证码”按钮

按钮禁止点击状态: 按钮能够点击状态: 我采用的方式是监听手机号/邮箱输入框的输入事件,即实判断用户输入的数据是否满足规则,如果满足手机号/邮箱规则,则激活“获取验证码”按钮。 话不多说,上代码 样式…

Java期末复习题之封装

点击返回标题->23年Java期末复习-CSDN博客 第1题. 定义一个类Person,定义name和age私有属性,定义有参的构造方法对name和age进行初始化。在测试类中创建该类的2个对象,姓名、年龄分别为lili、19和lucy、20,在屏幕打印出2个对象的姓名和年龄…

【Lidar】基于Python的三维点云数据转二维平面+散点图绘制

最近一直在搞点云相关的操作,有时候在处理点云数据时需要查看处理后的数据是否满足需求,所以就想着写一套展示点云的代码。之前已经分享过如何可视化点云了,感兴趣的可以自己去看下:【Lidar】基于Python的Open3D库可视化点云数据。…

微信商城小程序怎么弄

随着移动互联网的快速发展,微信小程序已经成为了许多商家和企业拓展业务的新渠道。其中,微信商城小程序更是受到了广大用户的喜爱。那么微信商城小程序怎么弄呢?下面给大家做个详细讲解。 首先,你需要在微信公众平台注册一个小程…

孩子都能学会的FPGA:第二十三课——用FPGA实现格雷码的编码和解码

(原创声明:该文是作者的原创,面向对象是FPGA入门者,后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门,作者不光让大家知其然,还要让大家知其所以然!每个工程作者都搭建了全自动化的仿…

文心一言大模型应用开发入门

本文重点介绍百度智能云平台、文心一言、千帆大模型平台的基本使用与接入流程及其详细步骤。 注册文心一言 请登录文心一言官方网站 https://yiyan.baidu.com/welcome 点击登录;图示如下: 请注册文心一言账号并点击登录,图示如下&#xff1…

深入理解数据在内存中是如何存储的,位移操作符如何使用(能看懂文字就能明白系列)文章超长,慢慢品尝

系列文章目录 C语言笔记专栏 能看懂文字就能明白系列 🌟 个人主页:古德猫宁- 🌈 信念如阳光,照亮前行的每一步 文章目录 系列文章目录🌈 *信念如阳光,照亮前行的每一步* 前言引子一、2进制和进制转化为什么…

ORACLE数据库实验总集 实验四 Oracle数据库物理存储结构管理

一、实验目的 (1)掌握 Oracle数据库数据文件的管理 (2)掌握 Oracle数据库控制文件的管理 (3)掌握 Oracle数据库重做日志文件的管理 (4)掌握 Oracle数据库归档管理, 二、…

Golang 原生Rpc Server实现

Golang 原生Rpc Server实现 引言源码解析服务端数据结构服务注册请求处理 客户端数据结构建立连接请求调用 延伸异步调用定制服务名采用TPC协议建立连接自定义编码格式自定义服务器 参考 引言 本文我们来看看golang原生rpc库的实现 , 首先来看一下golang rpc库的demo案例: 服…

忘记PDF密码了,怎么办?

PDF文件有两种密码,一个打开密码、一个限制编辑密码,因为PDF文件设置了密码,那么打开、编辑PDF文件就会受到限制。忘记了PDF密码该如何解密? PDF和office一样,可以对文件进行加密,但是没有提供恢复密码的功…

动态代理IP和静态代理IP有什么区别,适用场景是什么?

互联网行业的从业者经常会用到一种工具,那就是代理IP工具。动态代理IP和静态代理IP是两种常见的代理IP技术,它们在网络通信中起到了重要的作用,比如大数据行业的从业者会经常需要用到动态代理IP,跨境行业的从业者会经常用到静态代…

MySQL 忘记root密码后重置密码操作

在忘记 MySQL 密码的情况下,可以通过 --skip-grant-tables 关闭服务器的认证,然后重置 root 的密码,具体操作步骤如下。 步骤 1):关闭正在运行的 MySQL 服务。打开 cmd 进入 MySQL 的 bin 目录。 步骤 2):输入mysqld -…

Constraining Async Clock Domain Crossing

Constraining Async Clock Domain Crossing 我们在normal STA中只会去check 同步clock之间的timing,但是design中往往会存在很多CDC paths,这些paths需要被正确约束才能保证design function正确,那么怎么去约束这些CDC paths呢? 以下面的design为例,如下图所示 这里clk…

基于Linux的网络防火墙设计方法

摘要 随着Internet的迅速发展,网络越来越成为了人们日常生活不可或缺的一部分,而随之引出的网络安全问题也越来越突出,成为人们不得不关注的问题。 为了在一个不安全的网际环境中构造出一个相对安全的环境,保证子网环境下的计算机…