In Java, Class can have combination of Static and Instance Properties & Methods
● Static items are accessed using Class Name (Properties have the same Value shared across all Instances)
● Instance items are accessed using Instance Name (Properties have different Value for each Instance)
In Java Class is then used to create multiple Instances (also known as Objects).
And the only way to create an Instance (Object) is to instantiated it from some Class.
In Kotlin Class can only have Instance Properties & Methods (they can't be static).
Objects can be created without having a Class.
In order to add static Properties & Methods to a Class you need to use workaround known as Companion Object.
An Object which is created inside a Class and which Methods can be accessed using that Classes' Name.
Companion Object Syntax is much more complicated than using a simple static Keyword in Java. But when you think
about JAVA static Properties they don't make much sense. Their existence is something in between a Class and an Object.
Java Class is supposed to be just a Template (something imaginary) from which you can create something tangible to
work with (Instances/Objects). But you can still work with static Properties without creating Class Instance as if those
Properties actually exist. And the way they exist is not in the form of Object since you don't need to Instantiate any.
This means that Kotlin's approach might make more sense because everything is either a Class or an Object. But side
effect is more complicated Syntax for implementing static Properties & Methods.