IntelliJ IDEA 13.1 Web Help

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

Before After
                // 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
  1. Select the class.
  2. Open the Replace Inheritance With Delegation dialog box by choosing Refactor | Replace Inheritance With Delegation on the main menu, or on the context menu of the selection.
  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.

See Also

Reference:

Web Resources: