当前位置: 首页 > news >正文

【Java】让我们对多态有深入的了解(九)

目录

(1)接口的基本介绍​编辑

(2)接口的注意事项和细节

1.接口不能被实例化

2.接口中所有方法是public方法,接口中的抽象方法,可以不用abstract修饰

3.一个普通类实现接口,必须将接口所有的抽象方法都实现。

4.抽象类实现接口,可以不用实现接口的方法

5.一个类同时可以实现多个接口 

 6.接口中的属性,只能是final,而且是public static final修饰符

7.一个接口不能继承其他的类,但是可以继承多个别的接口。

 (3)接口和继承的区别

 (4)接口的多态性


(1)接口的基本介绍

 在接口类中可以有三种方法,分别为抽象、默认、静态,举例如下:

interface example{abstract int a();//抽象方法,如果没有写abstract,则其也会默认为abstract。default void b(){//默认方法};public static void c(){//静态方法}
}

而在实现类中,除了必须要实现的抽象类,还可以有自己的属性和方法。举例如下: 

interface example{abstract int a();//抽象方法,如果没有写abstract,则其也会默认为abstract。default void b(){//默认方法};public static void c(){//静态方法}
}
class iA implements example{int number=10;//自己的成员属性public void b(){//自己的成员方法System.out.println("这是在函数b");}public int a() {//实现抽象方法return 0;}
}

(2)接口的注意事项和细节

1.接口不能被实例化

interface example{}public class Main {public static void main(String[] args) {example example = new example();//接口不能被实例化}
}

2.接口中所有方法是public方法,接口中的抽象方法,可以不用abstract修饰

interface example{void a();//默认为abstract
}

3.一个普通类实现接口,必须将接口所有的抽象方法都实现。

4.抽象类实现接口,可以不用实现接口的方法

interface example{void a();//默认为abstract}
abstract class iB implements example{//如果是一个抽象类实现接口,则可以不去实现接口的方法}

5.一个类同时可以实现多个接口 

interface example{
}
interface example2{}
abstract class iB implements example,example2{//一个类同时可以实现多个接口 }

 6.接口中的属性,只能是final,而且是public static final修饰符

interface example{int a=10;//默认为public static final int a=10
}
public class Main {public static void main(String[] args) {System.out.println(example.a);}
}

7.一个接口不能继承其他的类,但是可以继承多个别的接口。

interface a{}
class b{}
interface c extends a{//这是正确的,接口可以继承其他的接口}
interface d extends b{//这是错误的,接口不能继承其他的普通类}

 (3)接口和继承的区别

很多人这时候觉得接口没有比继承比nb多少嘛,不就多个抽象方法嘛。假如有三个人,他们分别会编程、弹钢琴、健身,有一个儿子想拜干爹想学习他们的技能。如果用继承关系,是is-a的关系,这个人只能继承一个类,也就是学习一种技能。如果用继承同时实现三种则会报错,如下图。

 用接口则可以实现一个类去实现多个接口的方法,他们的关系是like-a。

 (4)接口的多态性

用生活中的一个实际例子,假如我们有手机、相机、电脑,我们想把手机和相机接入到电脑上,要怎么样接入呢?在现实我们知道用电脑上有usb接口直接插上就行。在编程中,我们首先则要一个接口定义usb规格,然后在手机和相机类去实现这个接口,最后在电脑中定义一个可以调用接口的方法。

interface usbinterface{//一个接口void use();
}
class phone implements usbinterface{//手机实现接口@Overridepublic void use() {System.out.println("手机接入");}
}
class camera implements usbinterface{//电脑实现接口@Overridepublic void use() {System.out.println("相机接入");}
}
class comperter{public void work(usbinterface usbinterface1){//定义可以调用接口的方法usbinterface1.use();}
}
public class Main {public static void main(String[] args) {comperter comperter = new comperter();phone phone = new phone();camera camera = new camera();comperter.work(phone);//体现了多态性System.out.println("====================");comperter.work(camera);//体现了多态性}
}

接口多态数组的体现

interface usbinterface{//一个接口void use();
}
class phone implements usbinterface{//手机实现接口@Overridepublic void use() {System.out.println("手机接入");}public void call(){//手机的功能System.out.println("可以打电话");}
}
class camera implements usbinterface{//电脑实现接口@Overridepublic void use() {System.out.println("相机接入");}public void picture(){//相机的功能System.out.println("可以照相");}
}
class comperter{public void work(usbinterface usbinterface1){//定义可以调用接口的方法usbinterface1.use();}
}
public class Main {public static void main(String[] args) {comperter comperter = new comperter();usbinterface []usbinterfaces = new usbinterface[2];usbinterfaces[0]=new phone();//体现了多态性usbinterfaces[1]=new camera();//体现了多态性if(usbinterfaces[0] instanceof phone){//如果运行类型为phone类则向下转型调用手机的方法((phone) usbinterfaces[0]).call();}if(usbinterfaces[1] instanceof camera){((camera)usbinterfaces[1]).picture();//如果运行类型为camera类则向下转型调用手机的方法}}
}

相关文章:

【Java】让我们对多态有深入的了解(九)

目录 (1)接口的基本介绍​编辑 (2)接口的注意事项和细节 1.接口不能被实例化 2.接口中所有方法是public方法,接口中的抽象方法,可以不用abstract修饰 3.一个普通类实现接口,必须将接口所有…...

12 个适合做外包项目的开源后台管理系统

1.D2admin 开源地址:https://github.com/d2-projects/d2-admin 文档地址:https://d2.pub/zh/doc/d2-admin/ 效果预览:https://d2.pub/d2-admin/preview/#/index 开源协议:MIT 2.vue-element-admin 开源地址:https…...

鼠标更换指针图案和更改typora的主题

鼠标更换指针图案 由此偶然看见好几个朋友都使用了新的图案替换掉了原有的鼠标图案,今天寻思自己也换一个图案 主要是觉得鼠标大一点儿会好看一些,所以就找了一些教程 官方教程,小的变动 当然最多的是官方教程,如果你只是想要…...

【洛谷 P1563】[NOIP2016 提高组] 玩具谜题(模拟+结构体数组+指针)

[NOIP2016 提高组] 玩具谜题 题目背景 NOIP2016 提高组 D1T1 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业。 有一天, 这些玩具小人把小南的眼镜藏了起来。 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。如下图: 这时 singer 告诉小南一个谜…...

阿里测试经验7年,从功能测试到自动化测试,我整理的超全学习指南

做测试七年多,有不少人问过我下面问题: 现在的手工测试真的不行了吗? 测试工程师,三年多快四年的经验,入门自动化测试需要多久? 自学自动化测试到底需要学哪些东西? 不得不说,随着…...

Educational Codeforces Round 143 (Rated for Div. 2)

Educational Codeforces Round 143 (Rated for Div. 2) D. Triangle Coloring 思路: 每个环都需要取最大值,那么我们讨论一个环获得最大值选的两条边的可能取法: 显然:如果三边相等,这个环有3种取法。如…...

业务代码编写过程中如何「优雅的」配置隔离

思考 不同的处理方式 1.常规的处理方式,通过某种规则判断区分代码环境 // 获取环境标识 const env getCurrentEnv();if (env dev) {// do something } else if (env test) {// do something } else if (env prod) {// do something } 分析: 1.此种…...

English Learning - L2-2 英音地道语音语调 2023.02.23 周四

English Learning - L2-2 英音地道语音语调 2023.02.23 周四查音标的工具怎么练习效果好准备工作大小声练习大元音开口度的对比舌位对比复习后元音 /ɑː/ /ɔː/ /uː//ɑː//ɔː//uː/前元音 /iː/发音技巧对应单词的发音对应句子的发音常见的字母组合中元音 /ɜː/发音技巧…...

java:线程等待与唤醒 - Object的wait()和notify()

java:线程等待与唤醒 - Object的wait()和notify() 1 前言 java使用Object类的wait()和notify()方法,可以实现线程等待和唤醒(Object类为所有类的父类,即所有类天然具有线程等待和唤醒的方法,一般使用Object类的wait(…...

实现弹窗功能并修改其中一个系数

把鼠标放在number-info上面,会是一个delon/chart的类库,可以在NG-ALAIN上找到阅读NG ALAIN的图表,以及number-info样式,数据文本 它拥有[title] [subtitle]两个可以是TemplateRef类型的,而template可以在里面放一些东西,比如按钮,所以可以放一个修改按钮 这里刚开始把template放…...

vue-draggable浏览器拖拽event事件对象拖动时 DragEvent path undefined

场景: 在做组件拖拽过程中,需要获取到触发元素冒泡过程中的所有元素,所以使用了event.path属性。在Chrome下正常运行,但是在FireFox下测试时发现,完犊子,失效了,通过问题排查,发现了…...

【云原生】搭建k8s高可用集群—20230225

文章目录多master(高可用)介绍高可用集群使用技术介绍搭建高可用k8s集群步骤1. 准备环境-系统初始化2. 在所有master节点上部署keepalived3.1 安装相关包3.2 配置master节点3.3 部署haproxy错误解决3. 所有节点安装Docker/kubeadm/kubelet4. 部署Kuberne…...

LeetCode121_121. 买卖股票的最佳时机

LeetCode121_121. 买卖股票的最佳时机 一、描述 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最…...

收割不易,五面Alibaba终拿Java岗offer

前言 前段时间有幸被阿里的一位同学内推,参加了阿里巴巴Java岗位的面试,本人19年双非本科软件工程专业,目前有一年半的工作经验,面试前就职于一家外包公司。如果在自己本人拿到offer之前,如果有人告诉我一年工作经验可…...

【离线数仓-4-数据仓库设计-分层规划构建流程】

离线数仓-4-数据仓库设计-分层规划&构建流程离线数仓-4-数据仓库设计-分层规划&构建流程1.数据仓库分层规划2.数据仓库构建流程1.数据调研1.业务调研2.需求分析3.总结2.明确数据域3.构建业务总线矩阵&维度模型设计4.明确统计指标1.指标体系相关概念1.原子指标2.派生…...

SQL零基础入门学习(十一)

SQL零基础入门学习(十) SQL NOT NULL 约束 NOT NULL 约束强制列不接受 NULL 值。 NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。 下面的 SQL 强制 “ID” 列、 “LastName” …...

排序基础之插入排序

目录 前言 一、什么是插入排序 二、实现插入排序 三、插入排序优化 四、插入排序的特性 前言 上一篇中我们说到了《排序基础之选择排序》,这一篇我们来学习一下排序算法中的另一种基础排序算法——插入排序。 一、什么是插入排序 简单来说就是:每…...

LabVIEW控制DO通道输出一个精确定时的数字波形

LabVIEW控制DO通道输出一个精确定时的数字波形如何使用数据采集板卡的DO通道输出一个精确定时的数字波形?解答:产生一个数字波形首先需要创建一个布尔数组,把波形序列信息放到该布尔数组中,然后通过一个布尔数组至数字转换vi来产生数字波形。…...

openpnp - 零碎记录

文章目录openpnp - 零碎记录概述笔记配置文件保存无效必须在查找问题之后, 才能保存配置文件如果想找出配置动作引起的配置内容变化, 还是要尝试保存后, 比对变化才行ENDopenpnp - 零碎记录 概述 这段时间, 正在配置校准手头的openpnp设备, 用的官网最新的openpnp2.0. 由于o…...

Qt编写微信支付宝支付

文章目录一 微信支付配置参数二 支付宝支付配置参数三 功能四 Demo效果图五 体验地址一 微信支付配置参数 微信支付API,需要三个基本必填参数。 微信公众号或者小程序等的appid;微信支付商户号mchId;微信支付商户密钥mchKey; 具…...

LeetCode 剑指 Offer 64. 求1+2+…+n

求 12…n &#xff0c;要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句&#xff08;A?B:C&#xff09;。 示例 1&#xff1a; 输入: n 3 输出: 6 限制&#xff1a; 1 < n < 10000 解法一&#xff1a;利用逻辑运算符的短路&#xf…...

Mapper代理开发

MyBatis快速开发https://blog.csdn.net/weixin_51882166/article/details/129204439?spm1001.2014.3001.5501 使用Mapper代理方式完成 定义与SQL映射文件同名的Mapper接口 &#xff0c;将Mapper接口和SQL映射文件放置同一目录结构 新建接口和包&#xff1a; 将Mapper接口和…...

为什么在连接mysql时,设置 SetConnMaxIdleTime 没有作用

目录测试1go 1.15.15go 1.17.12测试2go 1.15.15go 1.17.12参考在使用golang 连接 mysql时&#xff0c;为了节省连接资源&#xff0c;在连接使用过后&#xff0c;希望在指定长度时间不再使用后&#xff0c;自动关闭连接。 这时&#xff0c;经常会使用SetConnMaxLifetime()&#…...

嵌入式开发利器

前言 俗话说&#xff0c;工欲善其事必先利其器&#xff0c;做嵌入式开发首先需要选择好的工具&#xff0c;对的工具&#xff0c;工具选对了能事半功倍&#xff0c;节省很多时间&#xff0c;那些开发大佬一般都会使用各种各样的工具&#xff0c;不同的环节使用不同的工具&#…...

Qt 的QString类的使用

Qt的QString类提供了很方便的对字符串操作的接口。 使某个字符填满字符串&#xff0c;也就是说字符串里的所有字符都有等长度的ch来代替。 QString::fill ( QChar ch, int size -1 ) 例&#xff1a; QString str "Berlin";str.fill(z);// str "zzzzzz"…...

django项目部署(腾讯云服务器centos)

基本步骤&#xff1a; 购买腾讯云服务器并配配置好 >> 本地项目依赖收集准备 >> 上传项目等文件到服务器 >> 服务器安装部署软件和python环境 >> 开始部署&#xff08;全局来看就这5个步骤&#xff09; 目录 目录 1. 购买腾讯云服务器并配配置好 …...

计算机网络笔记、面试八股(一)——TCP/IP网络模型

Note&#xff1a;【计算机网络笔记、面试八股】系列文章共计5篇&#xff0c;现已更新3篇&#xff0c;剩余2篇&#xff08;TCP连接、Web响应&#xff09;会尽快更新&#xff0c;敬请期待&#xff01; 本章目录1. TCP/IP网络模型1.1 应用层1.1.1 应用层作用1.1.2 应用层有哪些常用…...

51单片机入门 - 简短的位运算实现扫描矩阵键盘

介绍 例程使用 SDCC 编译、 stcgal 烧录&#xff0c;如果你想要配置一样的环境&#xff0c;可以参考本专栏的第一篇文章“51单片机开发环境搭建 - VS Code 从编写到烧录”&#xff0c;我的设备是 Windows 10&#xff0c;使用普中51单片机开发板&#xff08;STC89C52RC&#xf…...

Mr. Cappuccino的第45杯咖啡——Kubernetes之部署SpringBoot项目

Kubernetes之部署SpringBoot项目创建一个SpringBoot项目将SpringBoot项目打成Jar包使用Dockerfile制作镜像部署SpringBoot项目创建一个SpringBoot项目 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache…...

vscode在远程服务器提交git的时候无需每次都要输入账号密码的配置

要避免在每次 git 操作时都需要输入账号和密码&#xff0c;可以使用 SSH 鉴权&#xff0c;具体步骤如下&#xff1a;生成 SSH key在本地计算机上使用命令 ssh-keygen -t rsa -b 4096 生成 SSH key。这个命令将在 ~/.ssh 目录下生成两个文件&#xff1a;id_rsa 和 id_rsa.pub&am…...