JavaRush /Blog Java /Random-ES /¿Por qué es necesaria la herencia de interfaz?
Павел
Nivel 11

¿Por qué es necesaria la herencia de interfaz?

Publicado en el grupo Random-ES
¿Por qué se necesitan interfaces? ¿Por qué es necesaria la herencia de interfaz? ¿Por qué se necesita el polimorfismo? Para aquellos que leyeron y entendieron cómo heredar la interfaz, pero no entendieron por qué. La última vez, usando el ejemplo de la familia Ivanov común y corriente, analizamos por qué se necesitan las interfaces. Seguimos digitalizando a la familia en problemas. Cada persona tiene algunos hábitos que no heredó de nadie ni transmitió a nadie: sus hábitos personales. Nuestra tarea es proporcionar a cada miembro de la familia hábitos únicos. Pasemos al plano de Java: necesitamos implementar métodos únicos en clases que pertenecerán sólo a estas clases. Bueno, ¡adelante! Este es Petia:
class Петя implements ПривычкиПапы, ПривычкиМамы {

//это личные Петины привычки
public void ковырятьВНосу () {
System.out.println("Ковырь-ковырь");
    }

//это унаследованные привычки
@Override
public void прихлюпывать() {
     System.out.println("Хлюп");
   }

@Override
public void поджимать () {
System.out.println("Поджать губки");
    }
}
Este es papá:
class Папа implements ПривычкиПапы {

//это личные Папины привычки
public void чесатьБороду () {
System.out.println("Чешу бороду");
    }

//это переданные привычки
   @Override
    public void прихлюпывать() {
     System.out.println("Хлюп");
   }
}
Esta es mamá:
class Мама implements ПривычкиМамы{

//это личные Мамины привычки
public void хлопатьРесницами () {
System.out.println("Хлоп-хлоп");
    }

//это переданные привычки
@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
¡Perfecto! ¡Todo funciona como deberia! En el primer artículo se decía que el programa es un reflejo del mundo real. La propiedad más interesante de la realidad es que cambia todo el tiempo. La familia Ivanov no fue la excepción: tenían una dulce hija llamada Masha. Y heredó el hábito de pestañear de mamá y sollozar de papá. Necesitamos hacer cambios en nuestro programa. ¿Por qué es necesaria la herencia de interfaz?  - 1Vamos, que no es tan difícil, lo principal es pensar con lógica. Al fin y al cabo, todo el mundo sabe por qué se necesitan las interfaces. Ahora creemos una interfaz Masha's Habits , describamos allí los métodos clapElashes() y squish() , implementémoslo en Masha y listo. Entonces, ¿qué pasa si los métodos con el mismo nombre ya están implementados en otras interfaces? Puedes hacerlo una vez. ¿Por qué es necesaria la herencia de interfaz?  - 2De hecho, quién sabe qué planes tiene la familia Ivanov, si nace Seryozha , quién heredará los hábitos de papá, mamá, bisabuelo y alguien más de la cuarta generación, creando cada vez una interfaz, como: interfaz Hábitos de Seryozha , y allí ¿Declarar métodos que ya se pueden declarar cientos de veces en otras interfaces? En un par o tres generaciones corremos el riesgo de tener interfaces con un montón de métodos idénticos que ya están descritos en otras interfaces, y si necesitamos cambiar el nombre por algún hábito (y esto es muy posible; después de todo, el mundo está cambiando) , entonces cómo descifrar estos espaguetis, no lo puedo imaginar. Sólo queda sentarse y soñar con un milagro. ¿Por qué es necesaria la herencia de interfaz?  - 3Ahora bien, si cada hábito tuviera su propia interfaz. Imaginemos:
public interface ПривычкаПрихлюпывать {
    public void прихлюпывать();
}
public interface ПривычкаПоджимать {
    public void поджимать();
}
public interface ПривычкаКовырятьВНосу {
    public void ковырятьВНосу();
}
public interface ПривычкаХлопатьРесницами {
    public void хлопатьРесницами();
}
public interface ПривычкаЧесатьБороду {
    public void чесатьБороду();
}
Y luego, como en Lego, podríamos, utilizando la herencia múltiple de hábitos individuales, escribir la interfaz que necesitamos para los hábitos de un miembro individual de la familia. Algo como esto:
public interface ПривычкиМамы extends ПривычкаПоджимать, ПривычкаХлопатьРесницами {
    }
public interface ПривычкиПапы extends ПривычкаЧесатьБороду, ПривычкаХлюпать {
    }
public interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу {
    }
public interface ПривычкиМаши extends ПривычкаХлюпать, ПривычкаХлопатьРесницами {
    }
Y luego simplemente implemente la interfaz deseada para la clase deseada, por ejemplo, Mamá:
class Мама implements ПривычкиМамы{
@Override
public void хлопатьРесницами () {
System.out.println("Хлоп-хлоп");
    }

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
Lo mismo se podría hacer con papá, Petya y Masha . Y luego, con la expansión de la familia Ivanov, no habría problemas con los hábitos, simplemente los barajaríamos mediante herencia en el nivel de la interfaz, como ingredientes en una ensalada, y no produciríamos un montón de métodos con el mismo nombre. Eh, sueños, sueños... ¿Por qué es necesaria la herencia de interfaz?  - 4El hombre dibujado tiene razón, esto es realmente posible: ¡ahora la simulación de la familia Ivanov está salvada! Un lector atento puede preguntarse: "¿Por qué crear interfaces para cada miembro de la familia? Tenemos un conjunto de acciones; impleméntelas inmediatamente para la clase requerida". Imaginemos que en muchos mundos paralelos hay dobles de Petya , y todos Petya necesitan implementar la interfaz Petya's Habits.
interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу

class ПетяВселеннаяХ implements ПривычкиПети
class ПетяВселеннаяY implements ПривычкиПети
// и т.д.
¿Qué pasaría si no hubiera una interfaz común?
class ПетяВселеннаяХ implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
class ПетяВселеннаяY implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
// и т.д.
Esto da como resultado un código más repetitivo. La herencia de interfaz hace que la aplicación sea más flexible para cambiar; en particular, se pueden resolver problemas con métodos repetidos. Tenga en cuenta nuevamente que se permite la herencia múltiple de interfaces.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION