返回顶部
首页 > 资讯 > 后端开发 > Python >浅谈Java为什么只能单继承
  • 813
分享到

浅谈Java为什么只能单继承

Java单继承 2023-03-15 11:03:17 813人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录先屡清楚继承和实现的区别:分析原因:多继承虽然能使子类同时拥有多个父类的特征,但是其缺点也是很显著的,主要有两方面: (1)如果在一个子类继承的多个父类中拥有相同名字的实例变量,

多继承虽然能使子类同时拥有多个父类的特征,但是其缺点也是很显著的,主要有两方面:

(1)如果在一个子类继承的多个父类中拥有相同名字的实例变量,子类在引用该变量时将产生歧义,无法判断应该使用哪个父类的变量。

例如: 类ClassA:

public class ClassA {
       protected int varSame = 0;
}
 
           类ClassB:
 
public class ClassB {
        protected int varSame = 1;
}

子类ClassC:(假设允许类与类之间多继承)

           public class ClassC extends ClassA, ClassB {
                   public void printOut() {
                           System.out.println(super.varSame);
                   }
                   public static void main(String[] args) {
                           ClassC classC = new ClassC();
                           classC.printOut();
                   }
           }

上面程序的运行结果会是什么呢?输出0还是1?

(2)如果在一个子类继承的多个父类中拥有相同方法,子类中有没有覆盖该方法,那么调用该方法时将产生歧义,无法判断应该调用哪个父类的方法。

例如: 类ClassA:

           public class ClassA {
                   public void printOut() {
                           System.out.println(0);
                   }
           }

类ClassB:

           public class ClassB {
                   public void printOut() {
                           System.out.println(1);
                   }
           }

子类ClassC:(假设允许类与类之间多继承)

public class ClassC extends ClassA, ClassB {
                   public static void main(String[] args) {
                           ClassA classA = new ClassC();
                           classA.printOut();      // -------------------------  A行
                           ClassB classB = new ClassC();
                           classB.printOut();      // -------------------------  B行
                           ClassC classC = new ClassC();
                           classC.printOut();       //-------------------------  C行
                   }
           }

上面程序的运行结果会是什么呢?A、B、C三行的输出是0还是1? 正因为有以上的致命缺点,所以java中禁止一个类继承多个父类;

在接口中不能有实例变量,只能有静态的常量,不能有具体的方法(包含方法体),只能有抽象方法,因此也就摒弃了多继承的缺点。 对于一个类实现多个接口的情况,因为接口只有抽象方法,具体方法只能由实现接口的类实现,在调用的时候始终只会调用实现类的方法(不存在歧义),因此不存在 多继承的第二个缺点;

而又因为接口只有静态的常量,但是由于静态变量是在编译期决定调用关系的,即使存在一定的冲突也会在编译时提示出错;

而引用静态变量一般直接使用类名或接口名,从而避免产生歧义,因此也不存在多继承的第一个缺点。 对于一个接口继承多个父接口的情况也一样不存在这些缺点。

先屡清楚继承和实现的区别:

1 类继承类,实现接口。接口继承接口。

2 类只能单继承类(抽象类和非抽象类), 可以多实现接口。而接口可以多继承接口。

分析原因:

Java中类不能多继承类是为了安全。因为无论是抽象类还是非抽象类都包含非抽象的方法(非抽象类也可能没有),当类可以多继承类时,被继承的不同的父类可能会有同名同参的方法,如果子类也没有重写这个同名同参的方法,则在子类的实例调用这个方法的时候就会出现冲突。

若为多继承,那么当多个父类中有重复的属性或者方法时,子类的调用结果会含糊不清,因此用了单继承。

为什么是多实现呢?

通过实现接口拓展了类的功能,若实现的多个接口中有重复的方法也没关系,因为实现类中必须重写接口中的方法,所以调用时还是调用的实现类中重写的方法。

那么各个接口中重复的变量又是怎么回事呢?

接口中,所有属性都是 static final修饰的,即常量,这个什么意思呢,由于JVM的底层机制,所有static final修饰的变量都在编译时期确定了其值,若在使用时,两个相同的常量值不同,在编译时期就不能通过。

例如:class A继承了class B 和class C, 但是 class B和class C中有同名同参的方法method,且在A中并没有重写方法method,那在A的实例中调用method方法就会出现冲突,jvm就会不知道到底该调用哪一个方法。

class B { method(){}};
class C {method() {}};
class A extends B, C{};
A a = new A(); 
a.method();

此时在执行a.method()时冲突就会出现。

所以Java只能单继承。

到此这篇关于Java为什么只能单继承的文章就介绍到这了,更多相关Java 单继承内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 浅谈Java为什么只能单继承

本文链接: https://lsjlt.com/news/199921.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 浅谈Java为什么只能单继承
    目录先屡清楚继承和实现的区别:分析原因:多继承虽然能使子类同时拥有多个父类的特征,但是其缺点也是很显著的,主要有两方面: (1)如果在一个子类继承的多个父类中拥有相同名字的实例变量,...
    99+
    2023-03-15
    Java 单继承
  • Java只能单继承的原因是什么
    今天小编给大家分享一下Java只能单继承的原因是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。多继承虽然能使子类同时拥有...
    99+
    2023-07-05
  • 浅谈Python类的单继承相关知识
    目录一、类的继承二、继承的定义、查看继承的特殊属性和方法三、继承中的访问控制四、方法的重写、覆盖override五、继承中的初始化上文我们总结过了Python多继承的相关知识,没看过...
    99+
    2024-04-02
  • 浅谈Java封装、继承、多态特性
    目录1.封装2.继承3.多态4.上代码,效果运行放在最后1.封装 什么是封装,谈谈自己对封装的理解,封装就是将类的信息(比如说类的属性)隐藏在类的内部,不允许外部程序直接访问。此时就...
    99+
    2024-04-02
  • 浅谈Java继承中的转型及其内存分配
    看书的时候被一段代码能凌乱啦,代码是这样的:package 继承;abstract class People { public String tag = "疯狂Java讲义"; //① public String na...
    99+
    2023-05-30
    java 继承 内存
  • 为什么Java不支持多继承
    这篇文章主要介绍“为什么Java不支持多继承”,在日常操作中,相信很多人在为什么Java不支持多继承问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”为什么Java不支持多继承”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-15
  • 什么是Java继承
    本篇内容主要讲解“什么是Java继承”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是Java继承”吧!一、继承的概念什么是继承在现实生活中,继承指的是子女继承父辈的财产。在程序中,当一个类A...
    99+
    2023-06-15
  • 为什么Golang没有继承?替代方式浅析
    Golang是一门非常受欢迎的编程语言,它具有高效、可靠、简洁等优势,在众多的编程语言中脱颖而出。但是,Golang与其他一些语言相比,存在一个很大的区别,那就是它没有继承。在传统的面向对象语言中,继承被认为是实现代码复用和提高代码可维护性...
    99+
    2023-05-14
  • 浅谈为什么单线程的redis那么快
    目录redis单机QPS为什么这么快内存型数据库简单的数据结构单线程IO多路复用总结redis单机QPS ./redis-benchmark -t set,lpush -n 1...
    99+
    2024-04-02
  • java不能被继承的类是什么类
    JAVA中被 final 标志的类,是最终类,不可以被继承,如:public 、final 、String。JAVA继承的介绍:继承是面向对象最显著的一个特性,继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的...
    99+
    2016-10-22
    java
  • Java中继承多数为什么是有害的
    这篇文章主要介绍“Java中继承多数为什么是有害的”,在日常操作中,相信很多人在Java中继承多数为什么是有害的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中继承多数为什么是有害的”的疑惑有所帮助!...
    99+
    2023-06-03
  • java什么是类的继承
    Java 中类的继承是通过扩展其他类而形成新类来实现的,原来的类称为父类(super class)或基类,新类称为原来类的子类或派生类。在子类中,不仅包含父类的属性和方法,还可以增加新的属性和方法,使得父类的基本特征可被所有子类的对象共享。...
    99+
    2014-09-27
    java 继承
  • Java中继承有什么危害
    这篇文章主要讲解了“Java中继承有什么危害”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中继承有什么危害”吧!  大多数好的设计者象躲避瘟疫一样来避免使用实现继承(extends ...
    99+
    2023-06-03
  • java继承的概念是什么
    在Java中,继承是一种机制,允许一个类(子类)继承另一个类(父类)的属性和方法。子类可以使用父类中定义的属性和方法,也可以根据需要...
    99+
    2024-04-02
  • 浅谈redis整数集为什么不能降级
    目录前言基本结构何时使用intsetintset添加元素类型变动升级加入65535旧数据移位降级为什么不实现降级小结前言 整数集合相信有的同学没有听说过,因为redis对外提供的只有...
    99+
    2024-04-02
  • Java中封装和继承是什么
    这篇文章给大家分享的是有关Java中封装和继承是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一. 封装那封装是什么呢?在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接...
    99+
    2023-06-20
  • java类的继承原则是什么
    Java类的继承原则是通过一个类(子类)继承另一个类(父类)的特性和行为。以下是Java类继承的原则:1. 单一继承:Java中的类...
    99+
    2023-10-18
    java
  • java继承的优缺点是什么
    这篇“java继承的优缺点是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java继承的优缺点是什么”文章吧。1、优点提...
    99+
    2023-06-30
  • java中继承的含义是什么
    在Java中,继承是一种面向对象编程的机制,允许一个类(子类)基于另一个类(父类)来定义。通过继承,子类可以继承父类的属性和方法,从...
    99+
    2023-10-26
    java
  • Java继承是什么及怎么实现
    今天小编给大家分享一下Java继承是什么及怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.什么是继承所谓继承就是抽...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作