Abhishek Keshri
Abhishek Keshri

Reputation: 3234

How can the Object class be a super class of subclasses?

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:

enter image description here

Option 2:

enter image description here

Upvotes: 13

Views: 2962

Answers (10)

LuCio
LuCio

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 to Object.

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:

  • Java does not support multiple inheritance: It provides single inheritence in a transitive way. Every class extends directly only one supercalss.
  • How is the relationship: The class 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

Shashank Singh
Shashank Singh

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

codeLover
codeLover

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

Joop Eggen
Joop Eggen

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

fantaghirocco
fantaghirocco

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

admoca60
admoca60

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

Andrew
Andrew

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

Max Vollmer
Max Vollmer

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

zzcron toby
zzcron toby

Reputation: 31

option 2.Object is a superclass of all other classes,but Object may not a dirrect superclass of a classe.

Upvotes: 2

Alexander Khlystov
Alexander Khlystov

Reputation: 91

Option 2, as every object derives Object.class methods

Upvotes: 3

Related Questions