Super y This
En nuestro programa podemos ver que entre la clase Doctor y Patient se repiten los atributos name, email, address y phoneNumber. Estos atributos son los que tendrá las Superclase Usuario y que luego heredará a la las otras Subclases.
Para hacer que una clase herede de otra se le agrega la palabra extends y el nombre de la clase de la que va a heredar, en este caso: Patient extends User.
Como la clase padre requiere el nombre y el email en el constructor, tenemos que darle estos parámetros desde la clase hijo, esto se lo mandamos mediante el método super() dentro del constructor de la clase hijo
Super
Indica que una variable o un método es de la clase Padre (superclase).
This
Permite especificar que la variable que está señalando (this.nombreVariable) es de la misma clase en la que se usa.
Una vez implementada la herencia se tienen que eliminar todos los getters y setters de los atributos que se tenían en la clase y que pasaron a la superclase, en la super clase estarán los getters, setters y validaciones de cada atributo.