can java abstract class have constructor