CoordinateReferenceSystem
is the base Interface from which all other GeoTools SRS are derived from - it is the base class of Geocentric and Geographic projections (and others with vertical and temporal coordinates). It comes from the ISO19111 specification by way of the OGC GeoAPI project.
CoordinateSystem
is also an interface that comes from ISO19111 and deals more with axis, datum and unit definition in the projection.
The fact we have two interfaces for this comes from Java not supporting multiple Inheritance while XSD does (I think, this was all written many years ago and the developer has since left the project).
In general you want to deal with CoordinateReferenceSystems
and in most cases the utility class CRS
is there to help you. A good place to look for more detail is the referencing chapter of the user guide.
For your final question - layers don't really have either but you can do
layer.getBounds().getCoordinateReferenceSystem();
To get a CoordinateReferenceSystem
if you need to really know.