为什么java不支持多重继承?

什么是钻石问题?如下图所示,B和C继承于A,D继承B和C(多重继承),在D中调用A的方法时,无法判断是调用B中的实现还是C的实现,下图继承关系是个菱形,所以该问题又叫做菱形问题。

如果java要解决这个问题,需要引入更复杂的机制,这和java
的初衷是背道而驰的(simple),但是java中可以实现多个接口,这与多重继承是非常相似的。

为什么java不支持多重继承?,布布扣,bubuko.com

时间: 2024-08-03 09:12:38

为什么java不支持多重继承?的相关文章

为什么Java不支持多继承?

没想过面试的时候,会遇到语言设计上的问题.现场答得并不好因为一直没思考过,经过了点搜索,渐渐有点思路. 1. 避免"钻石型"多继承问题:有两个类B和C继承自A.假设B和C都继承了A的方法并且进行了覆盖,编写了自己的实现.假设D通过多重继承继承了B和C,那么D应该继承B和C的重载方法,那么它应该继承哪个的呢? 2. 多种继承会使系统设计更加复杂且难以维护. 3. Java里的接口规定一个类该做什么,而不是怎么样做.而多继承可能会出现一种情况,就是两个类通过不同的方法做同样的东西,子类无法

《浅析:java不支持多继承的原因》

很久以前,博主的一个好朋友给我考了我一个问题,为什么Java不支持多继承,如果多继承会有什么错误.这个问题困扰了我很久,我从单继承方面去推导过,又从多态的层面去思考过,但都无法解释为什么Java不支持多继承的原因,后来也有在学校问老师,老师也只是让我多去思考,好吧,那我就多去思考吧. 在1995年,Java语言的设计者James Gosling发表白皮书的时候谈到了一个想法:Java为什么不支持多继承. 我们从设计人员给Java这门语言的定义去说起:JAVA:一个简单的,面向对象的,分布式的,解

继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类。 (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法。 (3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承。 (4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。 分析以上程

继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类. (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法.(3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承.(4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承. 分析以上程序示例,主要疑惑点是“子类继承父类的成员变量,父类对象是否会实例化?私有成员变量是否会被继承?被继承的成员变量

Java虚拟机支持的最大内存限制

最近在开发Java的程序.本来我是一直很喜欢Java的内存管理的,不需要担心分配内存,只管分配,垃圾收集器自己会给你回收内存的.现在开发的程序数据量很大,为了速度快,我准备把所有的信息加载进内存,这样可以保证快速响应.我还在反复算内存,想想自己的数据量,现在刚开始的时候应该够了(我的机器是4G内存,虽然Windows就认3.5G,但是比起我现在的数据量应该没问题). 没想到第一个实验的程序,跑了几个小时,就遇到了Out of Memory Exception了.看看自己的虚拟机设置,我设置的是-

[Java][log4j]支持同时按日期和文件大小分割日志

根据DailyRollingFileAppender和RollingFileAppender改编,支持按日期和文件大小分割日志. 源文件: Java代码   package com.bao.logging; import java.io.File; import java.io.IOException; import java.io.Writer; import java.text.SimpleDateFormat; import java.util.Calendar; import java.

java 中的多重继承

Java中的接口不仅仅是一种更纯粹的抽象类,它的目标比这更高.因为接口是根本没有任具体实现的.也就是说,没有任何与接口相关的存储:因此,也就无法阻止多个接口的组合.这一点是很有价值的,因为你有时候需要去表示"一个X是一个a和一个b以及一个c".在C++中,组合多个类的接口的行为被称作为多重继承.它可能会使你背负很沉重的包袱,因为每个类都有一个具体实现.在java中,你可以执行相同的行为,但是只有一个类可以有具体的实现:因此通过组合多个接口,c++的问题不会在java中发生: 下面展示一

Java语言支持的8中基本数据类型

Java语言支持的8中基本数据类型是: byte(字节型).short(短整型).int(整型).long(长整型).float(单精度浮点型).double(双精度浮点型).boolean(布尔型).char(字符型) 具体可分为四类: 整型 byte short int long 浮点型 float double 逻辑型 boolean(它只有两个值可取 true false) 字符型 char 表格如下: 基本类型 占据空间大小 取值范围 默认值 boolean 不确定 true/fals

使用Java原生支持读取资源配置文件

import java.util.PropertyResourceBundle; import java.util.ResourceBundle; /** * 使用Java原生支持读取资源配置文件 * * @author gtp * */ public class Config { /** 获取指定文件路径的资源文件 该句含义为:config/properties/jdbc.properties */ private static ResourceBundle jdbcProperties =

java 多态与多重继承

/** * java 中的每一中操作,操作的数据类型必须合法.父类有的方法子类都有 * 凡是能够使用父类生成对象的地方都可以使用子类生成对象. * * 多态性 * 是指允许不同类的对象对同一消息作出响应. * 多态性包括参数化多态性和包含多态性.多态性语言具有灵活. * 抽象.行为共享.代码共享的优势,很好的解决了应用程序函数同名问题. * 多态有两种表现形式:重载和覆盖 * 首先说重载(overload),是发生在同一类中.与什么父类子类.继承毫无关系. * 标识一个函数除了函数名外,还有函数