You can extend component controllers from each other as well. 
Use the following approach:
Parent component (to extend from):
/**
 * Module definition and dependencies
 */
angular.module('App.Parent', [])
/**
 * Component
 */
.component('parent', {
  templateUrl: 'parent.html',
  controller: 'ParentCtrl',
})
/**
 * Controller
 */
.controller('ParentCtrl', function($parentDep) {
  //Get controller
  const $ctrl = this;
  /**
   * On init
   */
  this.$onInit = function() {
    //Do stuff
    this.something = true;
  };
});
Child component (the one extending):
/**
 * Module definition and dependencies
 */
angular.module('App.Child', [])
/**
 * Component
 */
.component('child', {
  templateUrl: 'child.html',
  controller: 'ChildCtrl',
})
/**
 * Controller
 */
.controller('ChildCtrl', function($controller, $parentDep) {
  //Get controllers
  const $ctrl = this;
  const $base = $controller('ParentCtrl', {$parentDep});
  //Extend
  angular.extend($ctrl, $base);
  /**
   * On init
   */
  this.$onInit = function() {
    //Call parent init
    $base.$onInit.call(this);
    //Do other stuff
    this.somethingElse = true;
  };
});
You can define new method in the child controller, overwrite existing methods, call the parent methods, etc. Works really well.