La razón por la cual salió el error en el super, es porque al mandar llamar al constructor de la clase padre este debe de ir siempre al inicio del constructor de la clase hijo
Entender la Programación orientada a objetos
Programación orientada a objetos en Java
¿Qué es un Objeto?
Abstracción: ¿Qué es una Clase?
Modularidad
Definir Clases y sus componentes
Creando nuestra primera Clase
Método constructor
Static: Variables y Métodos Estáticos
Creando elementos estáticos
Final: Variables Constantes
Sobrecarga de métodos y constructores
¡Reto!
Encapsulamiento: Modificadores de acceso
Getters y Setters
Variable vs. Objeto
Variable vs. Objeto: Un vistazo a la memoria
Clases Anidadas
Clases Internas y Locales a un método
Enumerations
Reutilizar Código
¿Qué es la Herencia? Don't repeat Yourself
Super y This
Polimorfismo: Sobreescritura de Métodos
Polimorfismo: Sobreescribiendo el método toString
Interfaces
Creando una interfaz para definir si una fecha es agendable
Collections
Aplicar Abstracción
Clases Abstractas
Miembros abstractos
Clases Anónimas
Diferencias entre las Interfaces y las Clases Abstractas
Interfaces en Java 8 y 9
Herencia en interfaces
Ensamblando Objetos el proyecto
Simulando autenticación de usuarios
Modularizando la UI de Doctores
Definiendo las citas disponibles
Modularizando la UI de Pacientes
Recorriendo estructuras de árbol en Java
Agendando Citas
Cierre del curso: Continúa con Programación Funcional en Java
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.
Antes: $249
Paga en 4 cuotas sin intereses
Termina en:
Anahí Salgado Díaz de la Vega
Super
indica que una variable o método es de la clase padre, la superclase de cual heredan nuestras subclases, solo la usamos cuando aplicamos herencia.
Además, podemos llamar al constructor de la clase padre desde sus diferentes subclases usando super();
y enviando los argumentos que sean necesarios.
Por otro lado, this
nos permite especificar que nuestras variables están señalando a la misma clase donde estamos trabajando, ya sea una clase normal, anidada, subclase o superclase.
public class User {
int age = 1;
public int getAge() {
return this.age;
}
}
public class Doctor extends User {
String speciality = "Dentist";
Doctor() {
super.getAge(); // 1
this.getSpeciality(); // Dentist
}
public int getSpeciality() {
return this.speciality;
}
}
Aportes 49
Preguntas 7
La razón por la cual salió el error en el super, es porque al mandar llamar al constructor de la clase padre este debe de ir siempre al inicio del constructor de la clase hijo
SUPER interesting THIS class! 😃
Ya iba en el video 25 y me toco devolverme es bueno ir practicando y tener los conceptos bien claros
Algunos apuntes respecto a Herencia:
👾 Super nos permite indicar que una variable o método pertenece a la clase padre, en cambio con this indicamos que pertenece a la misma clase.
Se puede hacer la clase User de tipo
public class abstract User {}
para que no puedan ser instanciada por si sola. Quizás sea un pro-tip
Tengo una manera de realizar el mismo procedimiento de abstracción de la clase padre, les recomiendo investigar como funciona la normalizacion en base de datos, por lo que he observado ese proceso no se limita a las bases si no también a crear herencia en cualquier lenguaje de programación.
Algunos apuntes puntuales:
Creamos la clase usuario que tiene los atributos similares entre la clase Doctor y Patient. Y creamos getters y setters de estos atributos.
Realizamos herencia en la clase Patient con la palabra reservada**_ extends._**
Implementamos el constructor de la clase padre.
Realizamos herencia en la clase Doctor con la palabra reservada extends.
Implementamos el constructor de la clase padre.
Porque en el constructor de la clase hija debemos poner el constructor del padre?
Entiendo q los constructores con parametros son para inicializar objetos pero a la vez son opcionales, ya q sino le pasas parametros este se va al constructor por defecto que seria el constructor sin ningun parametro.
La palabra reservada extends se utiliza para expresar que es hija de la clase. ejemplo: public class ClaseHija extends ClasePadre.
La clase padre se denomina super clase y la clase hija subclase.
super: es la palabra reservada para referirnos a las variables de la superclase.
this: es la palabra reservada para referirnos a las variables de la misma clase en la que se utiliza.
Es interesante que una vez que se ha creado la clase padre y se asigna los atributos al método constructor, una vez que vamos a la clases hija y generamos el método constructor con alt + insert seleccionamos en “select none” y automáticamente nos completa el método constructor de la clase padre mas el super que indica la herencia, ayuda mucho eso.
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
<h4>Super</h4>Indica que una variable o un método es de la clase Padre (superclase).
<h4>This</h4>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.
super en todos los sentidos
En la Universidad el profesor decia que siempre que quieras heredar hacerte la pregunta ¿es un x?
De modo que seria:
¿Patient es un user? ¿Médico es un user?
Por ello cuando decian en los comentarios que las citas disponibles podrian ser herencia de doctor mi mente se crashea.
Citas disponibles como tal no son un Médico
Es solo por definición, o en lugar de User no seria mejor llamar Person la clase padre?
What?
![](
Usar la clase padre está muy padre, y es súper cuando invocamos super();
Tengo curiosidad, el método setPhoneNumber no debería ser así? :
public void setPhoneNumber(String phoneNumber) {
if (phoneNumber.length() != 8) {
System.out.println("El numero telefonico debe ser de 8 digitos");
} else {
this.phoneNumber = phoneNumber;
}
}
En mi opinion la herencia forma parte estructural del diseño en el paradigma de objetos que es la representacion de la realidad de un sistema. Y como tal del analisis de ese sistema surge un esquema de clases donde se separa la generalizacion de la especializacion. Sin meterme en los casos tipicos de estudio en el proyecto actual tanto el medico, como el paciente y el usuario son personas. Estas tienen caracteristicas similares (nombre, apellido, documento, etc) y especiales (el paciente historia clinica, el medico matricula y el usuario un rol). Por lo que el esquema de clase padre y clase hija surge del modelo y es el medio para representarlo; no duplicar codigo es uno de los beneficios pero no es el motivo de elegir una clase padre solo ver que se repiten propiedades o metodos si no representan la estructura del sistema a implementar. Por lo menos es mi opnion.
se podría simplificar la sentencia de la siguiente manera.
public void setPhoneNumber(String phoneNumber) {
if (phoneNumber.length() != 8){
System.out.println("El número telefónico debe ser de 8 dígitos máximo..");
}else {
this.phoneNumber = phoneNumber;
}
}```
Super y this
La herencia se define con la siguiente sintaxis:
public class Doctor extends User { // User → Súper Clase
}
**Super **
Indica que una variable o un método es de la Clase Padre (superclase).
this
Permite especificar que la variable que esta señalando (this.nombreVariable
) es de la misma Clase en que se usa.
super… de todo muy bien, no de superclase
padre… de todo muy padre, muy bien, no de clase padre.
tercera vez viendo esta clase, pero en el momento que escribo esto esporque comprendi todo
Super y This 📝
Cuando se usa this especificas que esta señalando a la variable de la misma clase en la que estas.
Cuando usas super Indica que la variable o un método es de la clase padre. Llama al constructor de la clase padre para darle el estado inicial .
Genial!! Aprendí mucho!!
¿La clase padre hereda los métodos de la clase anidada que esta dentro de la clase hija?
Excelente presentación del Super y el This
Super clase 😃
Excelente información. Muchas gracias
explicaste super el super()
me parece muy buenas tus explicaciones.
thanks for the good dedication
super() o this() solo pueden ser usados uno u otro, y deben de se la primer sentencia.
Estupenda clase instructora Anahi, mediante el uso de la palabra reservada extends vamos a poder transferir los elementos de la clase padre a las hijas.
Al aplicar la herencia tenemos disponibles los atributos y métodos de la superclase en las subclases, así ya o tenemos que volver a escribirlos, bataría llamarlos con la palabra super.
Salió el error en el super, porque al mandar llamar al constructor de la clase padre este debe de ir siempre al inicio de cualquier otra cosa del constructor de la clase hija.
Todo muy claro.
Excelente explicación de Super y This.😁
super claro 😃
de diez la clase muchas gracias
Las palabras reservadas this y super en el Lenguaje de programación Java brindan un acceso a los atributos, métodos y constructores de la clase en la que se encuentran, y por tanto, también de la clase padre respectivamente.
Faltaría hacer a id de la clase padre que sea autoincrementál no?
genial, a reutilizar
creo que el análisis para determinar el origen del error fue muy básico sin ningún fundamento, sin embargo todo lo demás excelente.
super siempre debe ir al inicio del constructor de la clase.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?