I'm trying to create a base controller that has common methods and common `onInit` logic.

Using the `extend` method adds the methods from the base controller to the child controller, but the lifecycle methods get **overwritten** completely.

* I tried using the `override.onInit` approach shown on [this documentation page](https://openui5.hana.ondemand.com/topic/21515f09c0324218bb705b27407f5d61) but it did not work.
* I also tried with `sap.ui.component` [like this](https://openui5.hana.ondemand.com/1.56.4/#/topic/407feaf830c94e4c9de48ce08adabd1c) but I couldn't get it to work at all.  

I'm not sure if it should work with the AMD syntax.

As far as I understood, the extension feature should replace common methods that have been overridden, but it should execute the lifecycle methods from both the base and extension controller on this respective order.

So my question are the following:

1. Is this behavior possible to achieve? If so, what am I doing wrong?
2. Is there a better way to implement it?

Example code:

Parent controller

```js
sap.ui.define([
  "sap/ui/core/mvc/Controller"
], function (Controller) {
  "use strict";

  return Controller.extend("my.namespace.controller.App", {
    onInit: function () {
      console.log("reusable init");
    },

    // ...
  });
});

```

Child controller

```js
sap.ui.define([
  "my/namespace/controller/App.controller"
], function (Controller) {
  "use strict";

  return Controller.extend("my.namespace.child.controller.App", {
    onInit: function () {
      console.log("extend init");
    },

    // ...
  });
});

```

This example logs only "extend init" when I run the application. I expected it to log both "reusable init" **and** "extend init" in this order.

I've omitted some code, but the main idea is represented on these two controllers. The only relevant metadata is that the base controller is abstract.