There are a number of solutions to your problem...
You can use composition to create a version of Date that is immutable (hides state changing methods) like this:
The problem withtis is that it is NOT a java.util.Date or java.sql.Date
Alternatively you can make your class return DEFENSIVE COPIES of the date. ie it returns a new instance with the same value.
The third way (off the top of my head) is to merge your original class and the Date composition from my first example. ie it will have the usual calls, and the Date calls as well, which get mapped to the inner instance.
Dave.
(ps: everything I know I leant from Effective
Java by Joshau Bloch, see the Javaranch Bunkhouse

)