> point 1 is claer , but why shoud we provide a zero
> arg constructor as it will be implicitly available to
> the class
You don't have to provide a zero-argument constructor, but you do need to make sure one exists. For example, if there are other constructors then there is no implicit zero-argument constructor. The easiest way to make sure one exists is to write it yourself.