Things that the Java compiler does automatically

  • Recall:   Java has the following rule:

    • Every object must be initialized,   therefore:

      • Every class must have a constructor method

      • If a class does not have any constructor:

        • The Java compiler will insert the default constructor

      Example:

       public class A                public class A
       {                             {
                                        public A() // inserted
          // Class has         ===>     {
          // no constructor                // "default" constructor
                                        }
      
      
          ....                          ....
       }                              }
      

Things that the Java compiler does automatically

  • Recall:   Java has another rule:

    • Every subclass object must be initialized, therefore:

      • A subclass constructor must invoke super(...) as its first statement

      • Otherwise:

        • The Java compiler will insert super(); at the start

      Example:

       public class B extends A      public class B extends A
       {                             {
          public B()		          public B()
          {                             {
             // No super(...) call         super();  // inserted
             ...                           ...
          }                             }
      
          ....                          ....
       }                              }
      

There is one more automatic insertion that the Java compiler will do...

  • The designers of the Java programming language wants to achieve the following inheritance hierachy:

     

    I.e.:

    • Every class in Java is descended from one special class called the Object class

    • I.e.:   the Object class is the parent class of every class in Java

How Java makes sure every class will inherit from the Object class

  • Rule:   if no inheritance is specified when a class is defined:
     

    I.e.:   the class definition does not contains extends

How Java makes sure every class will inherit from the Object class

  • Rule:   the Java compiler will automatically insert:    extends Object in the class definition:
     

  • Result:

      • Every class in Java inherits from the Object class

      • Therefore:   Every object in Java will have all the methods defined in the Object class !

Summary:   one more thing that the Java compiler will do automatically

  • Java has the following rule:

    • Every object that you define must have a parent object,   therefore:

      • Every class must extend another class

      • If a class does not extend any class:

        • The Java compiler will insert:   extends Object

      Example:

       public class A                public class A extends Object
       {                             {
          ....                          ....
          ....                          ....
       }                              }
      

  • I.e.:

    • Every object in Java will inherits from the Object class

The Object class in Java's library

  • The online documentation on the Object class can be found here:

  • Some methods in the Object class:

    • clone( ):   creates and returns a copy of this object.

    • equals(Object obj):   test if this object is equal to the Object obj

    • toString( ):   returns a String representation of this object.

  • Every class in Java will inherit these methods !!


  • Example on how Java programs make use of the methods in the Object class:

    • The System.out.print(obj) method will invoke the toString( ) method to obtain its String representation to print out the object obj

  • Therefore:

    • We can control the print out of an object by overriding the toString() in a class

Using and overriding the inherited toString() method

Example that shows that the GeometricObject class inherited the toString() method from the Object class

public class GeometricObject
{
    private String color;
    
    GeometricObject( String col )
    {
        color = col;
    }

    public String getColor()          
    { 
        return color; 
    }

    public double getArea()  // Dummy method
    {
        return 0;  // Some default value
    }

    // No "toString()" method defined !
    // Inherits "toString()" from Object !
} 
public class myProg
{
    public static void main(String[] args)
    {
        GeometricObject a = 
               new GeometricObject("red");

        // We can call the toString() method 
        // using a GeometricObject object    
        System.out.println( a.toString( ) );
    }
}









  

DEMO: demo/04-inheritance/15-toString

Using and overriding the inherited toString() method

Example that shows that the Circle class also inherited the toString() method:

public class Circle extends GeometricObject 
{
    private double radius;

    Circle(String col, double r)
    {
        super(col);
        radius = r;
    }

    public double getRadius()         
    { 
        return radius;
    }

    public double getArea()
    {
        return 3.14159*radius*radius;
    }

    // Inherits "toString()" from GeomObject
} 
public class myProg
{
    public static void main(String[] args)
    {
        Circle a =
               new Circle("red", 2.0);

        // We can call the toString() method 
        // using a Circle object    
        System.out.println( a.toString( ) );
    }
}









  

DEMO: demo/04-inheritance/16-toString

Using and overriding the inherited toString() method

We can override the inherited toString() method to print out an object in a more suitable format:

public class Circle extends GeometricObject 
{
    private double radius;

    Circle(String col, double r)
    {
        super(col);
        radius = r;
    }

    ...



    // Override the "toString()" method
    public String toString()
    {
        return "Color = " + getColor() 
                + " : "
                + "radius = " + radius;
    }
} 
public class myProg
{
    public static void main(String[] args)
    {
        Circle a =
               new Circle("red", 2.0);

        // We can call the toString() method 
        // using a Circle object    
        System.out.println( a.toString( ) );

        System.out.println(  a  );  // Same !
    }
}







  

DEMO: demo/04-inheritance/17-toString