clase general?
En términos generales, una clase que cuenta las características principales pero no los detalles específicos. Las clases situadas en la parte superior de la jerarquía de herencia se pueden llamar Generales.
¿Clase específica?
Una clase que es muy particular y establece los detalles específicos. Las clases situadas en la parte inferior de la jerarquía de herencia se pueden llamar Específicas.
Ejemplo 1:
Relatively General Class: Money Relatively Specific Class: Dollar, Euro, Rupees
Ejemplo 2:
Lemon, Orange are more Specific than Citrus Banana, Apple are more Specific than Non-Citrus Citrus, Non-Citrus are more Specific than Fruit Fruit is most general class
¿Conversión de un tipo de clase a otro tipo de clase?
Podemos convertir referencias a un tipo de clase a otro tipo de clase en Java. Pero para que se produzca la conversión, las clases deben estar relacionadas entre sí a modo de herencia.
Por lo tanto,
- Las referencias para vehículos y autobuses se pueden convertir entre sí.
- Las referencias de Vehicle y Car se pueden convertir entre sí.
- Las referencias de Vehículo y Camión se pueden convertir entre sí.
- Las referencias de Bus, Car y Truck no se pueden convertir entre sí.
Generalización
Convertir un tipo de subclase en un tipo de superclase se llama ‘ Generalización ‘ porque estamos haciendo que la subclase se vuelva más general y su alcance se está ampliando. Esto también se llama ensanchamiento o ensanchamiento . La ampliación es segura porque las clases se volverán más generales.
Por ejemplo, si decimos que Car is a Vehicle, no habrá objeción. Por lo tanto, el compilador de Java no solicitará el operador de conversión en la generalización.
Ejemplo:
Java
class Father { public void work() { System.out.println("Earning Father"); } } class Son extends Father { public void play() { System.out.println("Enjoying son"); } } class Main { public static void main(String[] args) { // father is a superclass reference Father father; // new operator returns a subclass reference father = (Father) new Son(); // which is widened using casting // and stored in father variable // Though casting is done but it is not needed father.work(); // Uncomment next line to see the error // father.play(); } }
Earning Father
Entonces, en Ampliación o Generalización, podemos acceder a todos los métodos de la superclase, pero no a los métodos de la subclase .
Ejemplo: ahora supongamos que anulamos los métodos de la superclase en la subclase
Java
class Father { public void work() { System.out.println("Earning Father"); } } class Son extends Father { @Override public void work() { System.out.println("Earning Son"); } } class Main { public static void main(String[] args) { // father is the super class reference Father father; // new operator returns a subclass reference father = (Father) new Son(); // which is widened using casting // and stored in father variable // Though casting is done but it is not needed // subclass method is invoked father.work(); } }
Earning Son
Especialización
La conversión de un tipo de superclase en un tipo de subclase se denomina ‘ especialización ‘. Aquí, estamos bajando de una forma más general a una forma específica y, por lo tanto, el alcance se reduce. Por lo tanto, esto se llama estrechamiento o reducción .
Restringir no es seguro porque las clases se volverán cada vez más específicas dando lugar a más y más dudas. Por ejemplo, si decimos que el vehículo es un automóvil, necesitamos una prueba. Por lo tanto, en este caso, el compilador de Java solicita específicamente la conversión. Esto se llama casting explícito .
Ejemplo: para mostrar cuándo no se permite la reducción
Java
class Father { public void work() { System.out.println("Earning Father"); } } class Son extends Father { public void play() { System.out.println("Enjoying son"); } } class Main { public static void main(String[] args) { try { // son is a sub class reference Son son; // new operator returns a superclass reference // which is narrowed using casting // and stored in son variable // This will throw exception son = (Son) new Father(); // Through a narrowed reference of the superclass // we can neither access superclass method // and nor the subclass methods // Below lines will show // an error when uncommented // son.work(); // son.play(); } catch (Exception e) { System.out.println(e); } } }
java.lang.ClassCastException: Father cannot be cast to Son
Ejemplo:
Java
class Father { public void work() { System.out.println("Earning Father"); } } class Son extends Father { public void play() { System.out.println("Enjoying son"); } } class Main { public static void main(String[] args) { // son is a subclass reference Father father; // new operator returns a subclass reference // which is stored in the father variable // father stores a Father class reference // because of implicit casting father = new Son(); // father is narrowed Son son = (Son)father; son.work(); // works well son.play(); // works well } }
Earning Father Enjoying son
Conclusión:
- Cuando una referencia de superclase (que se refiere a un objeto de superclase) se reduce, al usar esa referencia no podemos acceder ni a los métodos de la subclase ni a los métodos de la superclase.
- Cuando una referencia de subclase (que se refiere a un objeto de subclase) se amplía y luego se estrecha nuevamente, usando esa referencia podemos acceder a todos los métodos de la subclase, así como a la superclase. Esto es lo mismo que la referencia de clase base simple que se refiere al objeto de clase base donde los métodos de superclase se han heredado.
Publicación traducida automáticamente
Artículo escrito por RishavPandey1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA