-2

在java中,他们说类不能被多个超类继承。只能是一个。看到这段代码,

动物.java

public class Animal {   }

狗.java

public class Dog extends Animal{

public static void main(String[] args) {

    Animal animal = new Animal();
    Dog bulldog = new Dog();
    Dog rottweiler = new Dog();



    if (bulldog.equals(rottweiler)) {

        System.out.println("animal == bulldog");

    }else {

        System.out.println("animal != bulldog");
    }

}    } 

听到我们可以看到 Dog 类继承自 Animal。但是我使用的是属于java中Object类的equals方法。在 SCJP 书中,他们说 java 中的每个类都是 Object 类的子类。是的..!这就是为什么我能够在 Dog 类中使用 equals 之类的方法。那么我的问题是,我们不是在不知不觉中在java中使用了多重继承吗?为什么因为我们从 Object 和 Animal 类继承到 Dog 类?

4

4 回答 4

3

在这种情况下,Animal扩展Object;并Dog扩展Animal。因此,无论如何它都是单继承。

equals()方法在 中定义Object,并且可以Dog 通过 via Animal

在此处输入图像描述

于 2013-11-06T04:55:50.980 回答
0

Java 支持多级继承,但不支持多重继承。

  • 多级继承:C 扩展 B,B 扩展 A(合法)
  • 多重继承:C扩展B,A(不合法)

因此,在您的情况下DogextendsAnimalAnimalextends Object,这是合法的。

于 2013-11-06T04:55:57.203 回答
0

Java 中的每个类(除了Object)都有一个直接超类。如果您Rottweiler在示例中调用了一个类,那么 的直接超类RottweilerDog, 的直接超类DogAnimal, 的直接超类AnimalObject。虽然Rottweiler有三个超类(和) Dog,并且可以从所有三个超类继承成员,但它只有一个直接超类。AnimalObject

如果我们有多重继承,我们就可以做一些事情,比如定义Dog来扩展AnimalCompanion。但是我们不能在 Java 中做到这一点。

于 2013-11-06T04:58:12.993 回答
0

那就是所谓的“多级继承”而不是多重继承。

考虑以下示例:

示例 1:

class Foo { // Here you haven't specified any extends, so internally it will be
            // from Object class
}

示例 2:

class Bar extends Foo { //Here you have Foo as parent class
                        //Now Bar has all of the methods which are accessible
                        //from Foo as well as Object which is a parent of your
                        //class "Foo"

}

这就是您的假设:

class Bar extends Foo,Object { //No this is not how it works

}

希望它可以帮助你。

于 2013-11-06T05:00:24.950 回答