This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
there is no obligation on the return type of the method as long as it follow java syntax rules and compiles. why are you saying that the method cannot return variable of the type Main. the co-variant type is for overridding methods. Overriding is related to inheritance. when a method overriddes another method then the overridding method can have co-variant return type ,which means its return type can be any sub-class of the return type of overridden method. there is nothing stopping you from returning object of another class from your methods.