【JavaSE】接口 详解(上)

前言

本篇会讲到Java中接口内容,概念和注意点可能比较多,需要耐心多看几遍,我尽可能的使用经典的例子帮助大家理解~

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~



目录

前言

接口

语法

注意

 代码理解

接口运用举例

IUSB接口

KeyBoard类

Mouse类

Computer类

多个接口

代码理解(语法层面)

接口解决多继承问题 代码示例

Animal类

IFly、IRunning、ISwimming接口

Fish类

Duck类

再加上一个测试

接口间的继承

代码理解


接口

接口是公共的行为规范标准,在Java中,接口是多个类的公共规范,是一种引用数据类型

语法

  1. 定义格式与类基本相同,将class关键字换成interface关键字
  2. 接口中的成员变量(习惯上是大写)默认为public static final 修饰的(写的时候可省略public static final),必须被初始化
  3. 接口中的方法默认只能是public abstract 修饰的(也可省略不写,不写默认也是抽象方法(不能有具体的实现,否则会报错),用其他修饰符会报错)
  4. 接口中使用default修饰的方法static修饰的方法是可以有具体的实现
  5. 接口中不能有静态代码块、示例代码块构造方法
  6. 接口虽然不是类,但编译完成后也是字节码文件(后缀名是.class)。

注意

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

 代码理解

package demo2inter;public interface ITestInterFace {public static final int a=100;int AGE=10;abstract public void fun1();void fun2();default void func(){System.out.println("default!");}public static void staticFunc(){System.out.println("staticFunc!");}
}

接口的简单使用

  1. 接口不能被实例化
  2. 接口需要被类实现,需要使用关键字implements来实现
  3. 当一个类实现类这个接口,那么这个类要重写这个方法
  4. 接口也可以发生向上转型、动态绑定和多态。

public interface ITestInterFace {void draw();}
class Rect implements ITestInterFace{@Overridepublic void draw() {System.out.println("画一个矩形!");}
}
class Triangle implements ITestInterFace{@Overridepublic void draw() {System.out.println("画一个三角形!");}
}
class Test{public static void drawMap(ITestInterFace iTestInterFace){iTestInterFace.draw();}public static void main(String[] args) {drawMap(new Rect());//发生了向上转型和动态绑定drawMap(new Triangle());}
}

接口运用举例

请实现笔记本电脑使用USB鼠标、USB键盘的例子

  1. USB接口:包含打开设备、关闭设备功能
  2. 笔记本类:包含开机功能、关机功能、使用USB设备功能
  3. 鼠标类:实现USB接口,并具备点击功能
  4. 键盘类:实现USB接口,并具备输入功能

在包demo3中,创建3个类,一个接口

IUSB接口

package demo3;public interface IUSB {// USB接口void openDevice();//打开服务void closeDevice();//关闭服务}

KeyBoard类

package demo3;public class KeyBoard implements IUSB {@Overridepublic void openDevice() {System.out.println("打开键盘!");}@Overridepublic void closeDevice() {System.out.println("关闭键盘!");}public void input(){System.out.println("键盘输入!");}
}

Mouse类

package demo3;public class Mouse implements IUSB{@Overridepublic void openDevice() {System.out.println("打开鼠标!");}@Overridepublic void closeDevice() {System.out.println("关闭鼠标!");}public void click(){System.out.println("点击鼠标!");}
}

Computer类

package demo3;import demo2inter.ITestInterFace;public class Computer {public void powerOff (){System.out.println("关闭电脑!");}public void powerOn(){System.out.println("打开电脑!");}public void useDevice(IUSB usb){usb.openDevice();//这里要区分 USB引用了哪个对象if(usb instanceof Mouse){Mouse mouse =(Mouse) usb;//向下转型mouse.click();}//调用键盘if(usb instanceof KeyBoard){KeyBoard keyBoard=(KeyBoard) usb;keyBoard.input();}usb.closeDevice();}public static void main(String[] args) {Computer computer=new Computer();computer.powerOn();computer.useDevice(new KeyBoard());//向上转型computer.useDevice(new Mouse());computer.powerOff();}
}

多个接口

Java中不支持多继承,但是一个类可以实现多个接 口。接口表达含义是 具有**特性,可以帮助程序员忘掉类型,只关注特性。

代码理解(语法层面)

类TestDemo4实现了IA和IB接口

package demo4;//多个接口
interface IA{void testA();
}
interface IB{void testB();
}
class TestDemo4 implements IA,IB{@Overridepublic void testA() {System.out.println("testA()");}@Overridepublic void testB() {System.out.println("testB()");}
}
public class Test4 {public static void main(String[] args) {TestDemo4 testDemo4=new TestDemo4();testDemo4.testA();testDemo4.testB();}}

接口解决多继承问题 代码示例

在demomoreinher包中有Animal抽象类,Duck,Fish类 以及IFly、IRunning、ISwimming接口

Animal类

IFly、IRunning、ISwimming等动物特性应该采用接口方式

package demomoreinher;public abstract class Animal {protected String name;protected int age;public Animal(String name, int age) {this.name = name;this.age = age;}public abstract void eat();//像跑 游泳 飞等动作不能写在这里,因为不是所有动物都会这些技能  应该写在接口中
}

IFly、IRunning、ISwimming接口

//注意:这里的代码是在不同IFly、IRunning、ISwimming接口文件中的
public interface IFly {void fly();
}public interface IRunning {void run();
}public interface ISwimming {void swim();
}

Fish类

鱼只会游泳这项特性,所以接口ISwimming

package demomoreinher;public class Fish extends Animal implements ISwimming{//如果这里游泳写出类,java是不支持多继承的,所有说接口解决了多继承问题public Fish(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println(this.name+"吃鱼粮!");}@Overridepublic void swim() {System.out.println(this.name+"游泳~");}
}

Duck类

而鸭子游泳,跑,飞这3个技能都会,所以三个特性都接上

package demomoreinher;public class Duck extends Animal implements ISwimming,IFly,IRunning{public Duck(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println(this.name+"吃鸭粮!");}@Overridepublic void fly() {System.out.println(this.name+"飞~~~");}@Overridepublic void run() {System.out.println(this.name+"跑~~~");}@Overridepublic void swim() {System.out.println(this.name+"游泳~~~");}
}

再加上一个测试

package demomoreinher;public class TestAnimal {public static void eatFunc(Animal animal){animal.eat();//实现eat的动态绑定}public static void walk(IRunning running){running.run();//实现跑的动态绑定}public static void main(String[] args) {walk(new Duck("唐老鸭",3));eatFunc(new Fish("灵儿",2));}
}

测试结果

接口间的继承

相当于将接口合并在一起了

代码理解

IC继承了IA和IB,使IC接口的功能包含了IA和IB的功能,当然类TestDeme在实现接口IC时,要将IA,IB和IC的方法一起都要重写

package demo5;//接口继承问题
interface IA{void testA();
}
interface IB{void testB();
}
//IC接口不仅具备了自己的testC这个功能,还 扩展 了IA和IB的功能
interface IC extends IA,IB{void testC();}
class TestDemo implements IC{@Overridepublic void testA() {System.out.println("testA()");}@Overridepublic void testB() {System.out.println("testB()");}@Overridepublic void testC() {System.out.println("testC()");}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pta 1086 就不告诉你

1086 就不告诉你 分数 15 全屏浏览 切换布局 作者 CHEN, Yue 单位 浙江大学 做作业的时候,邻座的小盆友问你:“五乘以七等于多少?”你应该不失礼貌地围笑着告诉他:“五十三。”本题就要求你,对任何一对给定的正整数…

新手开抖店:选品过后如何有效对接达人?这些方法100%有效!

哈喽~我是电商月月 要说做抖音小店最主要的是什么?那当然是找品了 那出单最快的方法是什么?无疑是达人带货了! 但新手店铺没销量,没体验分,没好评怎么能让达人同意帮我们带货呢? 方法其实很简单&#x…

“双碳”目标下资源环境中的可计算一般均衡(CGE)模型应用

我国政府承诺在2030年实现“碳达峰”,2060年实现“碳中和”,这就是“双碳”目标。为了实现这一目标就必须应用各种二氧化碳排放量很高技术的替代技术,不仅需要考虑技术上的可靠性,也需要考虑经济上的可行性。可计算一般均衡模型&a…

AI预测福彩3D第26弹【2024年4月4日预测--第4套算法重新开始计算第11次测试】

今天清明节假日,一会要外出,可能要晚点回来。咱们尽早先把预测数据跑完,把结果发出来供各位彩友参考。合并下算法,3D的预测以后将重点测试本套算法,因为本套算法的命中率较高。以后有时间的话会在第二篇文章中发布排列…

UTONMOS:AI+Web3+元宇宙数字化“三位一体”将触发经济新爆点

人工智能、元宇宙、Web3,被称为数字化的“三位一体”,如何看待这三大技术所扮演的角色? 3月24日,2024全球开发者先锋大会“数字化的三位一体——人工智能、元宇宙、Web3.0”论坛在上海漕河泾开发区举行,首次提出&…

深入探索MySQL:成本模型解析与查询性能优化,及未来深度学习与AI模型的应用展望

码到三十五 : 个人主页 在数据库管理系统中,查询优化器是一个至关重要的组件,它负责将用户提交的SQL查询转换为高效的执行计划。在MySQL中,查询优化器使用了一个称为“成本模型”的机制来评估不同执行计划的优劣,并选择…

网络安全 | 什么是负载均衡器?

关注WX: CodingTechWork 介绍 负载均衡是在多个服务器之间有效分配网络流量的过程。负载均衡的目的是优化应用程序的可用性,并确保良好的终端用户体验。负载均衡可协助高流量网站和云计算应用程序应对数百万个用户请求,从而保证客户请求不会…

2012年认证杯SPSSPRO杯数学建模C题(第二阶段)碎片化趋势下的奥运会商业模式全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 C题 碎片化趋势下的奥运会商业模式 原题再现: 从 1984 年的美国洛杉矶奥运会开始,奥运会就不在成为一个“非卖品”,它在向观众诠释更高更快更强的体育精神的同时,也在攫取着巨大的商业价值&#…

颜色空间/模型(RGB, YUV,CMY/CMYK, HSI, HSV等)

什么是颜色 颜色是通过眼、脑和我们的生活经验所产生的对光的视觉感受,我们肉眼所见到的光线,是由波长范围很窄的电磁波产生的,不同波长的电磁波表现为不同的颜色,对色彩的辨认是肉眼受到电磁波辐射能刺激后所引起的视觉神经感觉…

51单片机实验02- P0口流水灯实验

目录 一、实验的背景和意义 二、实验目的 三、实验步骤 四、实验仪器 五、实验任务及要求 1,从led4开始右移 1)思路 ①起始灯 (led4) ②右移 2)效果 3)代码 2,从其他小灯并向右依次…

面向C++程序员的Rust教程(二)

先序文章请看: 面向C程序员的Rust教程(一) 所有权与移动语义 要说Rust语言跟其他语言最大的区别,那笔者觉得非数这个所有权和移动语义莫属。 深浅复制 对于绝大多数语言来说,变量/对象之间的赋值通常都是复制语义。…

微信开发工具——进行网页授权

微信开发工具——进行网页授权 微信公众平台设置 1.在首页创建好自己的订阅号 网站:https://mp.weixin.qq.com/ 点击立即注册,在选择订阅号(个人创建使用) 之后按流程填写后,点击设置与开发-------->基本配置,这…

JAVA八股--redis

JAVA八股--redis 如何保证Redis和数据库数据一致性redisson实现的分布式锁的主从一致性Redis脑裂现象及解决方案介绍I/O多路复用模型undo log 和 redo log(没掌握MyISAM 和 InnoDB 有什么区别? 如何保证Redis和数据库数据一致性 关于异步通知中消息队列…

Kubernetes(k8s):精通 Pod 操作的关键命令

Kubernetes(k8s):精通 Pod 操作的关键命令 1、查看 Pod 列表2、 查看 Pod 的详细信息3、创建 Pod4、删除 Pod5、获取 Pod 日志6、进入 Pod 执行命令7、暂停和启动 Pod8、改变 Pod 副本数量9、查看当前部署中使用的镜像版本10、滚动更新 Pod11…

基于Java+SpringBoot+Mybaties+layui+Vue+elememt 实习管理系统 的设计与实现

一.项目介绍 前台功能:用户进入系统可以实现首页,系统公告,个人中心,后台管理等功能进行操作 后台由管理员,实习单位,教师和学生,主要功能包括首页,个人中心,班级管理&am…

【C++学习】哈希的应用—位图与布隆过滤器

目录 1.位图1.1位图的概念1.2位图的实现3.位图的应用 2.布隆过滤器2.1 布隆过滤器提出2.2布隆过滤器概念2.3如何选择哈希函数个数和布隆过滤器长度2.4布隆过滤器的实现2.4.1布隆过滤器插入操作2.4.2布隆过滤器查找操作2.4.3 布隆过滤器删除 2.5 布隆过滤器优点2.6布隆过滤器缺陷…

Linux:make/makefile的使用

一、什么是makefile/make 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的 规则来指定,哪些文件需要先编译&am…

设置Chrome打开链接在新标签页显示

Chrome版本 版本 123.0.6312.106(正式版本) (64 位) 下面这两个页面都有设置按钮: https://www.google.com/?pli1或者https://www.google.com/?hlzh-CN 要先退出账号,要不然看不到右下角的 “设置” 。…

TCP/IP协议、HTTP协议和FTP协议等网络协议包简介

文章目录 一、常见的网络协议二、TCP/IP协议1、TCP/IP协议模型被划分为四个层次2、TCP/IP五层模型3、TCP/IP七层模型 三、FTP网络协议四、Http网络协议1、Http网络协议简介2、Http网络协议的内容3、HTTP请求协议包组成4、HTTP响应协议包组成 一、常见的网络协议 常见的网络协议…

vivado 配置存储器器件编程2

为双 QSPI (x8) 器件创建配置存储器文件 您可使用 write_cfgmem Tcl 命令来为双 QSPI (x8) 器件生成 .mcs 镜像。此命令会将配置数据自动拆分为 2 个独立 的 .mcs 文件。 注释 : 为 SPIx8 生成 .mcs 时指定的大小即为这 2 个四通道闪存器件的总大小。…