Reputation: 3234
Fact 1:
Java does not support multiple inheritance.
Fact 2:
Object is a superclass of all other classes
If I have a class Parent
and a class Child
which is inheriting the class Parent
:
class Parent {
}
class Child extends Parent {
}
In this case, how will the class Child
inherit the Object
class, if Java does not support multiple inheritance?
How is the relationship between these three defined?
Option 1:
Option 2:
Upvotes: 13
Views: 2962
Reputation: 5173
The JavaDoc says:
Class
Object
is the root of the class hierarchy. ...
If a class does not extend any other class by decalring it using the keyword extends
it extends though implicit from Object
.
The documentation says:
In the absence of any other explicit superclass, every class is implicitly a subclass of Object.
See the Example 8.1.4-1 "Direct Superclasses and Subclasses" in JLS, chapter 8.1.4
It shows that a class Point { int x, y; }
"is a direct subclass of Object"
Moreover the documentation says:
Classes can be derived from classes that are derived from classes that are derived from classes, and so on, and ultimately derived from the topmost class,
Object
. Such a class is said to be descended from all the classes in the inheritance chain stretching back toObject
.
The JLS states it short and formal:
The subclass relationship is the transitive closure of the direct subclass relationship.
Thus class Object
is the superclass of all classes.
But the documentation also says:
Excepting
Object
, which has no superclass, every class has one and only one direct superclass (single inheritance).
Going on with the example a class ColoredPoint extends Point { int color; }
"is a direct subclass of class Point
.". By the transitive relationship it's a (non-direct) subclass of class Object
.
Summarizing:
Object
is either the direct superclass or by transitive relationship the last superclass of any other class.
Answering the questions:
Parent
corresponds to the class Point
and the class Child
to the class ColoredPoint
of the JLS example. Only Option 2 shows this relation.Upvotes: 7
Reputation: 61
First of all, using Java 8, it is possible to accomplish Multiple inheritance using Default methods of interfaces.
Secondly, your understanding regarding Object class is correctly represented in 'Option 2'.
However, it is not multiple inheritance, rather multilevel inheritance. 'Option 1' is multiple inheritance.
Please check this link to read more about them.
Upvotes: 3
Reputation: 2592
Well it is an interesting discussion. I think it will be option no 2. As if you try the below code .
public static void main(String []args){
Parent p=new Parent();
Class c= p.getClass();
Child child =new Child();
Class c1= child.getClass();
System.out.println(c.getSuperclass());
System.out.println(c1.getSuperclass());
}
You will get output as :
class java.lang.Object
class Parent
Upvotes: 5
Reputation: 109557
No multiple inheritance means in Java a class extends only 1 class; has one immediate base class. Indirectly a class can have many ancestors: Child has Parent and Object as ancestor "super" classes.
Object --> Parent --> Child
--> OtherChild
Relation: 1 --> N
The reason for avoiding multiple inheritance like in C++, was the ambiguity involved:
Pseudo code assuming multiple inheritance:
class A : Comparable
class B : Comparable
class Child : A, B {
@Override A? B?
int compareTo(Child rhs) { ... super.compareTo ? ... }
}
A a = new Child();
B b = new Child();
a.compareTo(b);
Upvotes: 3
Reputation: 4878
From Class Object
public class Object
Class Object is the root of the class hierarchy.
Every class has Object as a superclass.
All objects, including arrays, implement the methods of this class.
This means that every Java class has Object
as root in the hierarchy, not necessarily as its immediate parent.
Upvotes: 3
Reputation: 143
The right answer is Option 2. Any Java class inherit all parents for their parents. In other words.
Class A extends Class B Class B extends Class C Class C extends Class D
Class X extends A -> it means that A inherit all protected/package/public fields from B,C and D.
In your example, Class Child inherit Parent properties but also Object properties in transitive mode.
Upvotes: 3
Reputation: 49606
Object
might not be a direct parent, but it's always a super parent.
Child extends Parent
Parent extends Object
|
V
Child [indirectly] extends Object
Upvotes: 9
Reputation: 8598
It's Option 2. If you define a superclass, that will be the immediate superclass of your class. If you don't define one, Object
will be the immediate superclass.
class Parent {
}
class Child extends Parent {
}
is equivalent to
class Parent extends Object {
}
class Child extends Parent {
}
So, while Object
is the superclass of all classes, there might be some steps in the class hierarchy before you get to Object
. It's not the immediate superclass of all classes.
Upvotes: 26
Reputation: 31
option 2.Object is a superclass of all other classes,but Object may not a dirrect superclass of a classe.
Upvotes: 2