Does Java support Mulitiple Inheritance?

2019-03-03 04:22发布

问题:

From the Java fact that all class in Java have a parent class as Object. But the same Java says that it doesn't support multiple inheritance. But what this code mean ?

public class A extends B
{
          //Blah blah blah
}

From the above code it means that Class A extends Class B. Now Class A also have inherited the properties of Object class which is the super class of B. Is this doesn't mean that Class A have inherited both Class B and Object Class, this what we called Multiple inheritance right?

So now Java supports Multiple inheritance, if not then what is the answer for the above code(which shows multiple inheritance)

回答1:

No, this is single inheritance. A inherits from B, B inherits from Object.

Multiple inheritance would be A extends from B and C, where B and C don't inherit from each other, which can cause the Diamond Problem:

If B defines a method foo() and C also defines a method foo(), and I do this:

new A().foo();

Which foo() implementation will be used?

This is a huge problem in many languages, so the Java designers decided not to allow multiple inheritance.



回答2:

Multiple inheritance is having more than 1 direct base class. The example you have given is single inheritance.

For example, if you have 3 classes A, B and C...

public class A extends B

with

public class B extends C

is still just single inheritance.
Multiple inheritance would be

public class A extends B, C


回答3:

Java does not support Multiple Inheritance by a developer. Behind the scenes, the compiler ensures everything extends Object.

Basically, the compiler will modify

public Class A extends Object, B to practically be Class A extends B and Class B extends Object.



回答4:

Multiple inheritance means that one class extends two other classes. Multiple inheritance is allowed in e.g. C++. But this is not that same as:

class Object {
...
}

class B extends Object { //default, not need to be there
...
}

class A extends B {
...
}


回答5:

From the Java fact that all class in Java have a parent class as Object

Actually no, that's not true. Object is only the default parent class. If you explicitly specify a parent, as in your example (A extends B), then the class you're defining no longer has Object as an immediate parent.

However, the fact that Object is the default means that it's impossible to create a class (except for Object itself) without a superclass. Since every class must have a superclass, every class has to have Object as an ancestor at some level.