Class Hierarchy in JAVA

 

Class Hierarchy

• Good class design puts all common features as high in the

hierarchy as reasonable


• The class hierarchy determines how methods are executed


• inheritance is transitive

– An instance of class Parrot is also an instance of Bird, an

instance of Animal, ..., and an instance of class Object 

A child class of one parent can be the parent of another child, forming class hierarchies. At the top of the hierarchy there’s a default class called Object.


• Good class design puts all common features as high in the

hierarchy as reasonable

• inheritance is transitive :

– An instance of class Parrot is also an instance of Bird, an instance of Animal, ..., and an instance of class Object


• The class hierarchy determines how methods are executed:

– Previously, we took the simplified view that when variable v is an instance of class C, then a procedure call v.proc1() invokes the method proc1() defined in class C

– However, if C is a child of some superclass C’ (and hence v is both an instance of C and an instance of C’), the picture becomes more complex, because methods of class C can override the methods of class C’ (next two slides).



Defining Methods in the Child Class: Overriding by Replacement


• A child class can override the definition of an inherited method in favor of its own

– that is, a child can redefine a method that it inherits from its parent

– the new method must have the same signature as the parent's method, but can have different code in the body


• In java, all methods except of constructors override the methods of their ancestor class by replacement. E.g.:

– the Animal class has method eat()

– the Bird class has method eat() and Bird extends Animal

– variable b is of class Bird, i.e. Bird b = ...

– b.eat() simply invokes the eat() method of the Bird class


• If a method is declared with the final modifier, it cannot be

overridden.


Defining Methods in the Child Class: Overriding by Refinement


• Constructors in a subclass override the definition of an inherited constructor method by refining them (instead of replacing them)

- Assume class Animal has constructors Animal(), Animal(int weight), Animal(int weight, int livespan)

- Assume class Bird which extends Animal has constructors

Bird(), Bird(int weight), Bird(int weight, int livespan)

- Let’s say we create a Bird object, e.g. Bird b = Bird(5)

- This will invoke first the constructor of the Animal (the superclass of Bird) and then the constructor of the Bird.


• This is called constructor chaining: If class C0 extends C1 and C1 extends C2 and ... Cn-1 extends Cn = Object then when creating an instance of object C0 first constructor of Cn is invoked, then constructors of Cn-1, ..., C2, C1, and finally the constructor of C

- The constructors (in each case) are chosen by their signature, e.g. (), (int), etc...

- If no constructor with matching signature is found in any of the class Ci for i>0 then the default constructor is executed for that class

- If no constructor with matching signature is found in the class C0 then this causes a compiler errorFirst the new method must have the same signature as the parent's method, but can

have different code in the body .

Post a Comment (0)
Previous Post Next Post