Java中不支持多重继承原因

news2024/9/17 8:27:44

3bad1b708b14478fb19192a69a95398e.gif在 Java 中回答这种棘手问题的关键是准备好相关主题, 以应对后续的各种可能的问题。

 

 

这是非常经典的问题,与为什么 String 在 Java 中是不可变的很类似; 这两个问题之间的相似之处在于它们主要是由 Java 创作者的设计决策使然。

 

为什么Java不支持类多重继承, 可以考虑以下两点:

 

1、 第一个原因围绕钻石💎形继承问题产生的歧义

 

考虑一个类 A 有 foo() 方法, 然后 B 和 C 派生自 A, 并且有自己的 foo() 实现,现在 D 类使用多个继承派生自 B 和 C。

 

如果我们只引用 foo(), 编译器将无法决定它应该调用哪个 foo(),这也称为 Diamond 问题,因为这个继承方案的结构类似于菱形,见下图:

 

                A foo()

               / \

             / \

 foo() B C foo()

             \ /

               \ /

               D foo()

即使我们删除钻石的顶部 A 类并允许多重继承,我们也将看到这个问题含糊性的一面。如果你把这个理由告诉面试官,他会问为什么 C++ 可以支持多重继承而 Java不行。

 

嗯,在这种情况下,我会试着向他解释我下面给出的第二个原因,它不是因为技术难度, 而是更多的可维护和更清晰的设计是驱动因素, 虽然这只能由 Java 言语设计师确认,我们只是推测。

 

维基百科链接有一些很好的解释,说明在使用多重继承时,由于钻石问题,不同的语言地址问题是如何产生的。

 

2、对我来说第二个也是更有说服力的理由是,多重继承确实使设计复杂化并在强制转换、构造函数链接等过程中产生问题。

 

假设你需要多重继承的情况并不多,简单起见,明智的决定是省略它。

 

此外,Java 可以通过使用接口支持多继承来避免这种歧义。由于接口只有方法声明而且没有提供任何实现,因此只有一个特定方法的实现,因此不会有任何歧义。

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

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

相关文章

UML基本图例

UML基本图例 软件流程和UML基本图例软件流程:下面是九种常用的UML图:1.用例图(UseCase Diagrams)2.类图(Class Diagram)3.对象图(Object Diagrams)4.状态图(Statechart D…

6道常见hadoop面试题

Q1.什么是Hadoop?   Hadoop是一个开源软件框架,用于存储大量数据,并发处理/查询在具有多个商用硬件(即低成本硬件)节点的集群上的那些数据。总之,Hadoop包括以下内容:   HDFS(Ha…

Chiplet技术概览

一、概览 chiplet技术顺应了芯片生产与集成技术发展的趋势,也开拓了半导体技术发展的新的发展方向,将创造出一种新的芯片设计和商业模式 1.1 芯片生产与集成技术发展的趋势 (1)低半径高带宽的物理连线(bandwidth / memory wall…

打开win10“启动”文件夹的2种方式

方式1:通过CMD命令 1.输入代码 按WinR键打开运行窗口,输入“shell:Common Startup”代码。 2.点击确定 点击下面的确定按钮,运行代码。 3.打开文件夹 弹出文件夹即为系统启动文件夹。 方式2:输入路径 1.打开文件管理器 打…

【城市开发者职业成长交流 - 重庆】加强交流,共创成长:重庆程序员的线下交流会总结

周五睡觉前,我把窗帘拉的严严实实,所有的闹钟全部取消,甚至另外一只电话直接关机掉,为的是第二天可以好好的躺到自然醒,我其实也不知道具体的几点,就感觉连上被踩!无奈的睁开眼睛,看…

基于WEB的院校课程管理系统设计与实现(论文+源码)_kaic

摘要 课程管理是学校管理工作的核心,是最为繁琐也最容易出错的工作,开发和 应用课程管理系统能够让课程管理工作人员从繁琐的工作中解脱出来,提高课程 管理的工作效率[1],实现课程管理的信息化。虽然目前高职院校应用的课程管理系…

bigdata.com《大数据计算框架》样题

容量单位从小到大的顺序依次为:TB、PB、EB、ZB。 . 用于设置环境变量的文件是 .bash_profile . 将HDFS文件下载到本地的命令是 hadoop fs -get。 . 不需要Java环境的支持是 MySQL . 通配符是用于模糊匹配的特殊字符,可以在关键字查询中使用。在MySQL…

助你面试一臂之力,认识银行测试

我们知道软件测试是为了保证软件的质量和可靠性而在新软件系统上线之前对软件进行的质量检测工作。通过软件测试这个过程找出软件中的错误,分析错误的产生原因和容易产生错误的区域,进而有针对性的设计测试方法提高软件测试的效率。 以上简单讲述了一下…

k8s 之网络组件-Calico(十九)

下载资源 :安装 kubernetes 网络组件-Calico 一,简介 Calico是Kubernetes生态系统中另一种流行的网络选择。虽然Flannel被公认为是最简单的选择,但Calico以其性能、灵活性而闻名。Calico的功能更为全面,不仅提供主机和pod之间的网…

【深入浅出密码学】离散对数

群相关知识点 离散对数相关 ## 蛮力搜索 对于解决 α x β \alpha^{x} \beta αxβ,我们不断地选取合适地 x x x,计算 a x a^x ax,直到找到满足这个等式的 x x x,时间复杂度 O ( ∣ G ∣ ) O(|G|) O(∣G∣). Baby-Step Giant-Step 对于解决 α x β…

卡尔曼滤波器使用一维与二维以及代码编写

注:要视频学习可以去B站搜索“DR_CAN”讲解的卡尔曼滤波器,深有体会! 链接: 1、【学习心得|基于卡尔曼滤波的MPU6050姿态解算】https://www.bilibili.com/video/BV1sL411F7fu?p2&vd_source3d0b47bb7325b7b3a156ba92207bbd6…

【人工智能】— 神经网络、M-P 神经元模型、激活函数、神经网络结构、学习网络参数、代价定义、总代价

【人工智能】— 神经网络 神经网络的历史Neural Network IntroM-P 神经元模型激活函数(Activation function)神经网络结构举例训练神经网络学习网络参数代价定义均方误差交叉熵(Cross Entropy) 总代价 神经网络的历史 第一阶段 ⚫ 1943年, McCulloch和Pi…

AES入门 万字详解(附推荐论文和研究领域)

目录 前言 加密过程 SubBytes(字节替换) ShiftRows(行移位) MixColumns(列混淆) AddRoundKey(轮密钥加) 轮密钥生成过程 概述 具体步骤 代码实现方式 Java Java Cryptog…

Build your own unconditional confidence

不要活在既定的社会价值体系中 人类的偏好大多数时候都是愚昧的 I play whatever gods give me 情绪价值稳定 解决问题的能力 Dont label yourself 真正的强者不会吝啬对他人的赞美 敬畏自然,敬畏未知事物 核心是你对这个事情是否感兴趣,觉得有价…

Java-三种基本控制结构及相关面试题

文章目录 前言一、 顺序控制结构1.1 概念1.2 代码1.3 NS图中体现 二、分支控制结构2.1 概念2.2 if语句2.3 switch语句2.4 NS图中的体现 三、循环控制结构3.1 概念3.2 for循环3.3 while循环3.4 do-while循环3.5 增强 for 循环NS图中的体现 四、相关面试题什么是控制流语句&#…

springboot解析@transaction注解原理

目录 第一步、全局搜索Transactional.class 第二步、查看哪里配置BeanFactoryTransactionAttributeSourceAdvisor 第四、SpringTransactionAnnotationParser是什么时候被注入的 第三、总结 先看一下transaction的官网文档 16. Transaction Management 第一步、全局搜索Tr…

Ansible-playbook-roles安装lnmp

使用roles安装lnmp 1、准备四台主机 192.168.142.10 192.168.142.20 192.168.142.30 192.168.142.40 2、10作为ansible管理端 首先ssh连接剩下三台主机 3、vim/etc/ansible/hosts 添加[nginxservers]配置nginx ip,[phpservers]php ip,[mysqlservers]mysql ip 4、cd /etc/ansibl…

ubuntu 20.04 qemu arm64 linux6.3.8 开发环境搭建

开发环境 ubuntu 20.04 VMware Workstation Pro 16 基于qemu(模拟器),ARM64 :virt cortex-a57 平台 搭建Linux 6.3.8 (当前最新版本) 准备 Linux 内核下载,下载最新稳定版本,当前为 linux-…

基于ipv6实现几乎零成本的内网穿透方案,小白的踩坑历程与经验分享

基于ipv6实现几乎零成本的内网穿透方案,小白的踩坑历程与经验分享 前言 最近想远程访问家里nas的想法老在脑海中浮现,原因大概是本人二开了一个管理系统,并在上面跑了些定时任务做自动化,就有了远程访问系统的需求。同时又想到&…

Python潮流周刊#7:我讨厌用 asyncio

△点击上方“Python猫”关注 ,回复“1”领取电子书 你好,我是猫哥。这里记录每周值得分享的 Python 及通用技术内容,部分为英文,已在小标题注明。(标题取自其中一则分享,不代表全部内容都是该主题&#xff…