The below answer has been edited heavily based on the comments.
You do not need to split your class into definition and declaration purely for the compiler's sake, as there is no need for forward declarations in Java (as there is in C++). You may want to split a class definition and declaration into an interface/class pair (or [abstract] class/class pair) due to design requirements, such as:
- Multiple classes implementing a single interface.
- Remote Procedure Calls, where you don't want to expose any of your class dependencies (since they may not be available on the client side)
- Class that is used by other classes, but you don't need/want its full functionality when testing (ex. database access service which you may want to mock in your test code)
However, this is more akin to using a virtual base class and concrete implementing classes in C++ and is often called "programming to an interface". You can read more about the technique in this article (with some arguments there why you may prefer to use an abstract class instead of an interface as the base). Also, such splitting should be considered carefully; in many cases, splitting a class is just pure overkill and will lead to unnecessary code bloat.
Therefore, the short answer is: you don't need to split the class only for the sake of having forward declaration (which the original question asks), though you may want to do it if there is a design reason to (but this is not the equivalent of C++'s header/class file split).