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)
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.
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
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.
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 {
...
}
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.