You cannot return "I", because not a single OOP language that I know allows you to return a type as a type (I donβt know how to rephrase it). However, each allows an instance of the type to be returned. The static method is part of the class definition and can be called while the application is running.
When running OOP, you should use the static keyword very carefully, as it is very easy to offend. If you want to bind methods, use an object. Static methods should only be used when no state is required, and the function simply processes the input and returns the result.
When chaining, you should maintain state and that where you do not use static classes / methods at all (normal, there are some cases, but these are exceptions, and this is not so).
source share