接口也默认继承Object类

news2025/2/4 12:53:39

目标:

1. 知道接口也默认继承Object类

2. 感受继承和重写在向上转型中的作用有多大

引出问题:

在我用 List接口的引用list 接收ArrayList这个集合类的实例时(此处发生向上转型),偶然发现,咦,引用list怎么能调用Object类中的方法?我知道所有类都会默认继承Object类,难道说接口也会继承Object类吗?

那么,接口类型的引用c可以调用哪些方法呢?

例子对比: 

带着这些问题,我们先来看2个例子,对比一下:

(1)类B继承类A,类B中重写Object类中的toString方法,A a = new B();

(2)类B实现接口A,类B中重写Object类中的toString方法,A a = new B();

我们比较熟悉子类和父类之间发生的向上转型。来看,

1)类B继承类A,类B中重写Object类中的toString方法,A a = new B();

类A会继承Object类中的所有方法,类A中除了有自己的方法,还有Object类中的方法。

A a = new B();发生了向上转型

a可以调用的方法有:

1. 父类A中特有的方法(包括类A自己特有的方法和Object类中特有的方法)特有即没有被重写

2. 子类B中重写的方法(子类重写的方法可能有:父类A中的方法以及Object类中的方法)

只要这个方法被重写了,就只会调用重写后的方法。如下:子类B中重写了toString方法。

2)类B实现接口A,类B中重写Object类中的toString方法,A a = new B();

接口A继承Object类。接口A中除了有自己的方法,还有继承的Object类中的方法。

A a = new B();发生了向上转型

a可以调用的方法有:

1. 父接口A中特有的方法(包括父接口A自己特有的方法和Object类中特有的方法)特有即没有被重写

2. 子类B中重写的方法(子类重写的方法可能有:父接口A中的抽象方法以及Object类中的方法)

只要这个方法被重写了,就只会调用重写后的方法。如下:子类B中重写了toString方法。

综上:发生向上转型,父类/父接口的引用可以调用的方法是:

1. 父类/父接口特有的方法

2. 子类中重写的方法

得出结论:

没错,接口也默认继承Object类。

那我们在回过头来看文章开头的问题:

为什么list可以调用toString方法?因为父接口继承Object类,所以父接口List中除了有自己的方法还有Object类中的方法,List类型的list当然可以调用自己的方法喽。 

接着,我们发现,不对啊,list调用父接口(继承的Object类)的toString方法不是应该输出的“地址”吗,怎么不是?

你可别忘了,方法被子类重写后,就会调用子类重写的方法了。所以我们去看看子类ArrayList中的方法。

有同学又有疑问了,你骗人,ArrayList类中根本没有toString方法,别着急,我们来看它的父类,如下图:

  

最后,我们在AbsrtactCollection类中发现了toString方法。

子类会继承父类所有的成员变量和成员方法。一路继承下来,ArrayList这个集合类中就会有toString方法啦。

对于接口List而言,ArrayList算子类,子类中重写了父接口中的方法,调用这个方法时,会调用重写的那个。于是list调用toString方法,会调用重写的那个,不会输出地址。

思考:

从这里,我们是不是就能体会到继承的牛逼之处了,就像继承财产,只要继承了,就是我的了。(比如上面,List接口继承Object类,Object类中的方法都是我List类的啦。)

还有重写的必要性,在一个类中重写了某个方法,这个重写的方法可以被一路继承,被好多类都拥有。(比如上面,AbsrtactCollection类中重写的toString方法被一路继承,ArrayList等类都拥有了)

还有向上转型,父类的引用可以调用子类重写的方法,那被一路继承的重写的方法,也可以被调用到啦。(比如上面,父类的引用list可以调用子类重写的toString方法)

不要看简简单单的一行代码:String s = list.toString(); 输出的不是“地址”这个问题,

要想明白这个问题,可是要知道很多知识点的。要知道继承,重写,向上转型,以及类和接口都会继承Object类等等。

最后:

关于接口继承Object类,还有很多知识未了解。像接口继承Object类,一个类可以继承多个接口,难道会继承多次Object类吗?应该是只会继承一次的。这还待补充。还有关于底层的一些深入了解。这篇先写到这。

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

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

相关文章

【Python常用函数】一文让你彻底掌握Python中的toad.selection.select函数

任何事情都是由量变到质变的过程,学习Python也不例外。只有把一个语言中的常用函数了如指掌了,才能在处理问题的过程中得心应手,快速地找到最优方案。本文和你一起来探索Python中的toad.selection.select函数,让你以最短的时间明白…

Grounding dino + segment anything + stable diffusion 实现图片编辑

目录 总体介绍总体流程 模块介绍目标检测: grounding dino目标分割:Segment Anything Model (SAM)整体思路模型结构:数据引擎 图片绘制 集成样例 其他问题附录 总体介绍 总体流程 本方案用到了三个步骤,按顺序依次为&#xff1a…

YOLOv5入门实践(2)— 手把手教你使用make sense标注数据集(附工具地址+使用教程)

前言:Hello大家好,我是小哥谈。鉴于labelimg图像标注软件安装起来比较麻烦,本节课再给大家介绍另外一款数据集标注工具。这是一款在线标注数据集的工具,用起来非常的方便。🌈 前期回顾: YOLOv5入门实践&…

当执行MOV [0001H] 01H指令时,CPU都做了什么?

今天和几位单位大佬聊天时,讨论到一个非常有趣的问题-当程序执行MOV [0001H], 01H计算机实际上都做了哪些工作?乍一看这个问题平平无奇,CPU只是把立即数01H放在了地址为0001的内存里,但仔细想想这个问题远没有那么简单&#xff0c…

SystemVerilog之覆盖率详解

文章目录 1.0 覆盖率前言1.1 覆盖率类型1.2 覆盖策略及覆盖组1.3 覆盖率数据采样1.3.1 bin的创建与使用1.3.2 条件覆盖率1.3.3 翻转覆盖率1.3.4 wildcard覆盖率1.3.5 忽略bin与非法bin 1.4 交叉覆盖率1.4.1 排除部分cross bin1.4.2 精细化交叉覆盖率1.4.3 单个实例的覆盖率1.4.…

定量分析计算51单片机复位电路工作原理 怎么计算单片机复位电容和电阻大小

下面画出等效电路图 可以知道单片机内必然有一个电阻RX,为了简化分析,我们假设他是线性电阻(不带电容,电感的支路) 还有一个基础知识: 电容器的充电放电曲线: 还需要知道电容电压的变化是连续…

【简单认识zookeeper+kafka分布式消息队列集群的部署】

文章目录 一、zookeeper1、定义2、工作机制3、Zookeeper 特点4、Zookeeper 数据结构5、Zookeeper 应用场景6、Zookeeper 选举机制(1)第一次启动选举机制(2)非第一次启动选举机制 7、部署zookeeper群集 二、消息队列概述1、为什么需…

《线性调频雷达典型有源干扰抑制技术研究》阅读记录

文章目录 《线性调频雷达典型有源干扰抑制技术研究》 阅读记录(1)研究背景与意义:(2)有源压制干扰(3)有源欺骗式干扰(4)压制干扰的抑制(5)欺骗干扰…

面试热题(全排列)

给定一个不含重复数字的整数数组 nums ,返回其 所有可能的全排列 。可以 按任意顺序 返回答案。 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 先在这里说明一下排列和组合的区别? 组合:是指从一…

[gdc]Rendering ‘God of War Ragnark‘

gdc23, sony santa monica关于god of war的分享; back ground 作者stephen mcauley现在是santa monica的technical director;20年加入santa monica,作为rendering lead,有9年的经验,之前在ubisoft montre…

[鹤城杯 2021]Middle magic 解题思路过程

过程 打开题目&#xff0c;是一道PHP的代码审计。代码如下&#xff1a; <?php highlight_file(__FILE__); include "./flag.php"; include "./result.php"; if(isset($_GET[aaa]) && strlen($_GET[aaa]) < 20){$aaa preg_replace(/^(.*)…

河道水位自动监测预警 yolov5

河道水位自动监测预警系统基于yolov5网络模型AI视频智能水尺读数技术&#xff0c;河道水位自动监测预警系统通过在河道周边布设监控摄像头&#xff0c;实时监测水位的变化&#xff0c;一旦水位超过预设阈值&#xff0c;将自动发出预警信号&#xff0c;并提示相关人员采取相应的…

计算机网络-物理层(一)物理层的概念与传输媒体

计算机网络-物理层&#xff08;一&#xff09;物理层的概念与传输媒体 物理层相关概念 物理层的作用用来解决在各种传输媒体上传输比特0和1的问题&#xff0c;进而为数据链路层提供透明(看不见)传输比特流的服务物理层为数据链路层屏蔽了各种传输媒体的差异&#xff0c;使数据…

Java 基础知识点

Object 类相关方法 getClass 获取当前运行时对象的 Class 对象。 hashCode 返回对象的 hash 码。 clone 拷贝当前对象&#xff0c; 必须实现 Cloneable 接口。浅拷贝对基本类型进行值拷贝&#xff0c;对引用类型拷贝引用&#xff1b;深拷贝对基本类型进行值拷贝&#xff0c;对…

CentOS7.7.1908升级python3版本

介绍 本文将详细介绍在CentOS7.7.1908系统的服务器将自带的python版本升级到3.8.0版本的过程。 在升级前CentOS7.7.1908中已经存在旧python版本。 查看CentOS版本命令&#xff1a; cat /etc/centos-release升级前后的python版本&#xff08;python3升级前为3.6.8&#xff09…

开箱报告,Simulink Toolbox库模块使用指南(三)——Simscape 电路仿真模块

文章目录 前言 Simscape 电路仿真模块 模型搭建 仿真求解 分析和应用 总结 前言 见《开箱报告&#xff0c;Simulink Toolbox库模块使用指南&#xff08;一&#xff09;——powergui模块》 见《开箱报告&#xff0c;Simulink Toolbox库模块使用指南&#xff08;二&#xf…

grafana中利用变量来添加dashboard详情页地址实现点击跳转

背景 最近弄grafana的dashboard,突然想到各个dashboard之前可以直接跳转到不同详细页面的面板,于是找了找实现方法 实现 以stat 格式的面板为例,显示出各个pod的对应状态, PromQL是(avg(kube_pod_status_phase{phase"Running", namespace!"kube-system"…

用友U8+CRM 任意文件上传+读取漏洞复现(HW0day)

0x01 产品简介 用友U8 CRM客户关系管理系统是一款专业的企业级CRM软件&#xff0c;旨在帮助企业高效管理客户关系、提升销售业绩和提供优质的客户服务。 0x02 漏洞概述 用友 U8 CRM客户关系管理系统 getemaildata.php 文件存在任意文件上传和任意文件读取漏洞&#xff0c;攻击…

缓存 基础

在项目里面缓存是怎么用的? 项目中缓存是如何使用的&#xff1f;为什么要用缓存&#xff1f;缓存使用不当会造成什么后果? 这个问题&#xff0c;互联网公司必问&#xff0c;要是一个人连缓存都不太清楚&#xff0c;那确实比较尴尬。 只要问到缓存&#xff0c;上来第一个问题…

大数据课程I4——Kafka的零拷贝技术

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 掌握Kafka的零拷贝技术&#xff1b; ⚪ 了解常规的文件传输过程&#xff1b; 一、常规的网络传输原理 表面上一个很简单的网络文件输出的过程&#xff0c;在OS底层&…