Java类不涉及多重继承?

时间:2013-11-06 04:54:10

标签: java oop inheritance

在java中,他们说类不能被多个超类继承。只能是一个。请参阅此代码,

Animal.java

public class Animal {   }

Dog.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。但我使用的是equals方法,它属于java中的 Object 类。在SCJP一书中,他们说java中的每个类都是Object类的子类。是..!这就是为什么我能够在Dog类中使用equals等方法。那么我的问题是,我们不是在不知不觉中在java中使用多重继承吗?为什么因为我们从Object类和Animal类继承到Dog类?

4 个答案:

答案 0 :(得分:3)

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

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

访问该方法

enter image description here

答案 1 :(得分:0)

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

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

因此,在您的情况下,Dog扩展AnimalAnimal扩展Object,这是合法的。

答案 2 :(得分:0)

Java中的每个类(Object除外)都只有一个 immediate 超类。如果您的示例中有一个名为Rottweiler的类,那么Rottweiler的直接超类将为DogDog的直接超类将为Animal并且Animal的直接超类将是Object。虽然Rottweiler有三个超类(DogAnimalObject),并且可以继承所有这三个超级成员,但它只有一个立即超类。

如果我们有多重继承,我们就可以执行定义Dog以扩展AnimalCompanion的操作。但我们不能用Java做到这一点。

答案 3 :(得分: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

}

希望它对你有所帮助。