in order define different variants of a method or constructor. Take a look at this, a common example in Java where we create a custom view: public class CustomCardView extends CardView { public CustomCardView(Context context) { this(context, null); } public CustomCardView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CustomCardView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(attrs); } private void init(AttributeSet attrs) { // init here }