`

java为什么搞单继承,多继承有什么坏处

阅读更多
多继承虽然能使子类同时拥有多个父类的特征,但是其缺点也是很显著的,主要有两方面:
(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中禁止一个类继承多个父类;

在接口中不能有实例变量,只能有静态的常量,不能有具体的方法(包含方法体),只能有抽象方法,因此也就摒弃了多继承的缺点。
对于一个类实现多个接口的情况,因为接口只有抽象方法,具体方法只能由实现接口的类实现,在调用的时候始终只会调用实现类的方法(不存在歧义),因此不存在 多继承的第二个缺点;而又因为接口只有静态的常量,但是由于静态变量是在编译期决定调用关系的,即使存在一定的冲突也会在编译时提示出错;而引用静态变量一般直接使用类名或接口名,从而避免产生歧义,因此也不存在多继承的第一个缺点。
对于一个接口继承多个父接口的情况也一样不存在这些缺点。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jay198746/archive/2010/05/28/5630276.aspx
分享到:
评论
1 楼 bepatient 2010-06-07  
另参见:http://scorpiomiracle.iteye.com/blog/580983

相关推荐

    27_Java为什么没有多继承

    然而,与许多其他面向对象语言不同,Java只支持单继承,不支持多继承。这究竟是为什么呢?让我们深入探讨这个问题。 首先,我们需要理解什么是继承。继承是一种“is-a”关系,允许一个类(子类)继承另一个类(父类...

    Java 实现继承实例代码

    这个例子展示了Java继承的核心概念,包括: 1. 使用`extends`关键字创建子类。 2. 访问和覆盖父类的方法。 3. 添加子类特有的方法。 4. 多态性的应用。 通过学习这个实例,开发者能够更好地理解和运用Java的继承...

    Java面向对象之继承练习题.doc

    【Java面向对象之继承练习题】的解析与详解: 1. **类的继承**:在Java中,继承是面向对象编程的重要特性,允许一个类(子类)继承另一个类(父类)的属性和方法。例如,我们可以创建一个`Music`类作为其他音乐相关...

    java类和对象继承多态性

    java类和对象继承多态性是java语言中的一种基本机制,它允许开发者创建一个新的类,并继承已有的类的属性和行为。这种机制可以提高代码的复用性和维护性。 继承是java语言中的一种机制,通过继承,开发者可以创建一...

    Java 接口与继承

    2. 尽管Java在类继承上是单继承的,但可以通过实现多个接口来实现多重继承的效果,接口是Java中另一种形式的继承,它允许一个类实现多个接口。 3. 子类继承了父类的所有非私有成员变量和方法,但不包括构造函数。...

    java继承类实例

    当子类的构造方法被调用时,会先执行父类的构造方法(如果有的话),这就是为什么在`Child`的构造方法中我们看到`super(name)`,它确保了父类的`name`也得到正确初始化。然后,子类自己的初始化逻辑才会被执行,即`...

    Java--类的继承

    2. 为什么需要继承: 继承主要解决的问题是代码重复和软件设计的模块化。在现实世界中,许多对象具有相似的特征和行为。通过继承,我们可以创建一个基础类,包含共有的属性和方法,然后根据需要创建更具体的子类,...

    java继承部分课件

    在这个名为"java继承部分课件"的资料中,我们可以期待学习到关于Java继承的基础知识、应用场景以及最佳实践。 在Java中,继承是通过使用`extends`关键字来实现的。例如,如果我们有一个名为`Animal`的父类,我们...

    JAVA中什么是继承.docx

    2. 多重继承:一个子类可以继承多个父类,但 Java 语言中的类只支持单继承,而接口支持多继承。 继承的应用场景: 1. 代码重用:继承可以使得子类继承父类的代码,使得代码更加简洁和易维护。 2. 类之间的关系:...

    java 中的接口与继承

    在Java中,继承是单继承的,即一个类只能直接继承一个父类,但可以通过接口实现多继承的效果。继承提高了代码的复用性,使得类层次结构更加清晰。 接口与继承的关系密切。一个类可以同时实现多个接口,也可以继承一...

    Java 接口多继承

    Java 接口多继承和类实现多个接口的demo

    经典java继承例子

    Java继承支持单继承,即一个子类只能直接继承一个父类。但通过接口,我们可以实现多继承的效果,因为一个类可以实现多个接口。 在实际应用中,我们通常会重写父类的方法,以满足子类的特定需求。这是通过使用`@...

    Java中extends类的继承

    - Java遵循单一继承原则,即一个子类只能有一个直接父类,但可以间接继承多个父类(通过多层继承)。 - 多层继承的例子: ```java public class Grandparent { // ... } public class Parent extends ...

    java中继承与多态的题目

    在 Java 中,继承可以分为单继承和多继承。单继承是指一个子类继承一个父类,而多继承是指一个子类继承多个父类。Java 只支持单继承,但可以通过接口实现多继承。 继承的特点 继承有以下几个特点: * 子类继承...

    JAVA接口与继承实验

    JAVA接口与继承实验 本实验报告主要涉及到JAVA的接口和继承两个重要概念。通过三个实验,逐步介绍了接口的定义和使用、继承关系的建立和应用。 一、实验目的: 1. 掌握类的继承关系。 2. 掌握接口的定义与使用。 ...

    Java实验报告——类的继承、多态的应用

    总结来说,这个实验报告通过实际编程练习,帮助我们巩固了Java中抽象类和抽象方法的定义,以及类的继承和多态性这两个核心概念。通过设计和实现学生管理类,我们可以更深入地理解这些概念在实际问题解决中的应用。

    java基础继承封装多态

    在 Java 中,只支持单一继承,也就是说一个类只能有一个直接父类。 继承的优点是可以提高代码的复用性和灵活性。子类可以继承父类的属性和方法,并且可以添加自己的属性和方法。子类也可以重写父类的方法,以提供...

    java继承作业.pdf

    Java继承作业.pdf 在本文中,我们将讨论Java继承的基本概念和实现方法,並以三个实例来演示继承的应用。 一、new A 和 A a=new A()的区别 在Java中,new关键字用于创建对象,而A a=new A()是将对象赋值给变量a。...

    JAVA继承的相关知识点

    下面我们将深入探讨JAVA继承的相关知识点。 1. **继承的概念**: - 继承体现了类之间的层次结构,子类继承父类,表示子类是父类的一个特例,具备父类的所有特性但可能有所扩展。 - Java中声明继承使用`extends`...

    java继承例题

    在下面的例子中,我们将通过多个示例来演示Java继承的使用。 【例 4.1】:简单继承 在这个例子中,我们定义了两个类:A和B。类B继承自类A,并继承了类A的成员变量`i`和成员方法`showi()`。在main方法中,我们创建...

Global site tag (gtag.js) - Google Analytics