Combining composition and inheritance : Inheritance « Class Definition « Java Tutorial

class A {
  A(int i) {
    System.out.println("A constructor");

class SubA extends A {
  SubA(int i) {
    System.out.println("SubA constructor");

class B {
  B(int i) {
    System.out.println("B constructor");

class SubB1 extends B {
  SubB1(int i) {
    System.out.println("SubB1 constructor");

class SubB2 extends B {
  SubB2(int i) {
    System.out.println("SubB2 constructor");

class SubB3 extends B {
  SubB3(int i) {
    System.out.println("SubB3 constructor");

// A cultural way of doing something:
class C {
  C(int i) {
    System.out.println("C constructor");

class SubC extends C {
  private SubB1 subB1;
  private SubB2 subB2;
  private SubB3 subB3;
  private SubA subA;
  public SubC(int i) {
    super(i + 1);
    subB1 = new SubB1(i + 2);
    subB2 = new SubB2(i + 3);
    subB3 = new SubB3(i + 4);
    subA = new SubA(i + 5);
    System.out.println("SubC constructor");

public class MainClass{
  public static void main(String[] args) {
    SubC x = new SubC(9);

C constructor
B constructor
SubB1 constructor
B constructor
SubB2 constructor
B constructor
SubB3 constructor
A constructor
SubA constructor
SubC constructor

5.22.3.Method Overriding
5.22.4.The extends Keyword
5.22.5.Deriving a Class
5.22.6.The keyword super represents an instance of the direct superclass of the current object.
5.22.7.Derived Class Constructors: Calling the Base Class Constructor
5.22.8.Overriding a Base Class Method
5.22.9.Type Casting
5.22.10.Inheritance, constructors and arguments
5.22.11.Combining composition and inheritance
5.22.12.Inheritance and upcasting.
5.22.13.Overloading a base-class method name in a derived class does not hide the base-class versions.
5.22.14.Cleanup and inheritance
5.22.15.Creating a Multilevel Hierarchy
5.22.16.Demonstrate when constructors are called in a Multilevel Hierarchy