abstract class User