Let me split your question in two parts
(1) Unlike constructors, they can return an object of any subtype of their return type (2), which gives you great flexibility when choosing the class of the returned object.
Let them say that you have two Extended classes from Player , which are PlayerWithBall and PlayerWithoutBall
public class Player{ public Player(boolean withOrWithout){
Here you get both answers. Flexibility and as opposed to constructor behavior. Now you can see with these factory methods that you must do WHAT PLAYER TYPE YOU NEED
source share