La generalización es el proceso de extraer propiedades y funcionalidades comunes de dos o más clases y combinarlas en otra clase que actúa como la clase principal de esas clases o, lo que podemos decir, la clase generalizada de esas clases especializadas. Todas las subclases son un tipo de superclase. Entonces podemos decir que la subclase «es-A» superclase. Por lo tanto, la generalización se denomina «relación es-A».
Aquí hay un ejemplo de generalización:
En esta figura, vemos que hay dos tipos de vuelos, por lo que creamos una clase de vuelo que contendrá propiedades comunes y luego tenemos una clase internacional y doméstica que son una extensión de la clase de vuelo y tendrán propiedades de vuelo, así como sus propio. Aquí vuelo es el padre/superclase y los otros dos son hijo/subclase. Vuelo internacional Vuelo “is-a” así como el vuelo doméstico.
Ejemplo 1: Generalización como extensión
// super or parent class class Person { static int count = 1; String name; int age; String gender; } // subclass or child of Person class Student extends Person { // name, age and gender // get inherited from Person int rollNo; String course; } // subclass of Person class Teacher extends Person { // name, age and gender // get inherited from Person static int count = 20; String subject; int experience; } class Test { public static void main(String[] s) { Teacher t = new Teacher(); t.name = "Shaan"; // name gets inherited in teacher System.out.println(t.name); // will give priority to its own count System.out.println(t.count); } }
Shaan 20
Explicación: Teníamos dos clases Profesor y Estudiante que tienen propiedades comunes como nombre, edad y género, así que creamos otra clase Persona que tiene estas propiedades y luego extendimos estas dos a partir de ella. Ahora, cuando estamos creando un objeto de clase de maestro, también tenemos todas las propiedades de la clase de persona. Aquí vemos que la clase del maestro tiene su propio valor de recuento, por lo que ocultará el valor de los padres. No hemos dado la propiedad de «nombre» en la clase del maestro, pero aún así, la estamos usando. Esto se debe a que todos los atributos y métodos de la clase principal se heredan en la clase secundaria. Hemos dado propiedades adicionales en la clase del maestro que pertenecen solo a la clase del maestro. Estas propiedades adicionales muestran la extensión que la generalización proporciona a la clase secundaria.
Ejemplo 2: Generalización como restricción
// abstract super class abstract class User { String name; int age; String occupation; // abstract method abstract void fillForm(String name, String occupation); } // non abstract sub class of User class Doctor extends User { String specialization; // extra attributes int experience; // doesn't give implementation of fillForm() method } class Test { public static void main(String[] s) { User u = new User(); // extra attribute of child class so will // not be accessible to parent class u.experience = 10; } }
Salida: 3 errores –
- Doctor no es abstracto y no anula el método abstracto fillForm(String, String) en User
class Doctor extends User ^
- El usuario es abstracto; no se puede instanciar
User u = new User(); ^
- no puedo encontrar el símbolo
u.experience = 10; ^
símbolo: variable experiencia
ubicación: variable u de tipo Usuario
Explicación: el usuario es una clase abstracta que tiene un método abstractofillForm() porque el formulario será diferente para un paciente y para un médico, por lo que el formulario de llenado será diferente. Ahora la clase médica tiene que proporcionar su cuerpo o tiene que declararse abstracta. Esta es la restricción que la superclase impone a su clase secundaria que la clase secundaria tiene que heredar todas sus propiedades y funcionalidades y no puede omitir ninguna. Pueden proporcionar otra implementación anulando las características existentes, pero no pueden omitirla. En este caso, esto generará un error de compilación porque doctor no es abstracto ni le ha dado cuerpo al método fillform(). Otra razón es que la clase Usuario no tiene un atributo de experiencia, está en la clase Doctor solo, por lo que el usuario no puede acceder a ella.
En los ejemplos anteriores , vemos que una clase secundaria tiene que heredar todas las características de su padre, aunque puede cambiar su implementación anulándola, no puede ignorar ninguna característica del padre. Esto muestra la forma restrictiva de generalización.
También vemos que la clase secundaria tiene sus propias propiedades que el objeto de la clase principal no puede usar porque estas propiedades extendidas pertenecen solo a un elemento secundario. Esta adición de propiedades adicionales muestra
una forma extensible de generalización.
Publicación traducida automáticamente
Artículo escrito por SukritiSukhija y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA