change User into abstract class