IntelliJ IDEA 2017.2 Help

Replace Inheritance with Delegation

The Replace Inheritance With Delegation refactoring allows removing a class from inheritance hierarchy, while preserving the functionality of the parent. IntelliJ IDEA creates a private inner class, that inherits the former superclass or interface. Selected methods of the parent are invoked via the new inner class.

Example

BeforeAfter
// File Class.java public class Class extends SuperClass { public int varInt; public void openMethod() { ... } } // File SuperClass.java public abstract class SuperClass { public static final int CONSTANT=0; public abstract void openMethod(); public void secretMethod() { ... } }
// File Class.java public class Class { public int varInt; private final MySuperClass superClass = new MySuperClass(); public SuperClass getSuperClass() { return superClass; } public void openMethod() { superClass.openMethod(); } private class MySuperClass extends SuperClass { public void openMethod() { ... } } } // File SuperClass.java UNCHANGED public abstract class SuperClass { public static final int CONSTANT=0; public abstract void openMethod(); public void secretMethod() { ... } }

To replace inheritance with delegation, follow these steps

  1. Select the class to be refactored in the Project Tool Window, or open this class for editing and place the caret somewhere in the source code of the class.
  2. On the main menu, or on the context menu of the selection, choose Refactor | Replace Inheritance With Delegation.

    The Replace Inheritance With Delegation dialog box opens.

  3. In the Replace with delegation inheritance from field, select the parent object, inheritance to which will be replaced.
  4. Specify the name for the field of the new inner class.
  5. In the Inner class name field, specify the name for the inner class definition.
  6. In the Delegate members area, select the members of the parent class, that will be delegated through the inner class.
  7. To create a getter for the inner class, select the Generate getter for delegated component check box.
  8. To review the intended changes and make final corrections prior to the refactoring, click Preview. To apply the changes immediately, click Refactor.
Last modified: 29 November 2017

See Also