Esta es quizás la pregunta más formulada en cualquier entrevista relacionada con el desarrollo de Software o la garantía de calidad del software. He visto por mi experiencia que a menudo muchos de nosotros nos confundimos u olvidamos la definición y el uso de clases e interfaces abstractas. Por lo tanto, quiero hacerlo más fácil para que nadie tenga problemas con él nunca más.
la clase abstracta y las interfaces son dos pivotes muy vitales en el concepto de Programación Orientada a objetos.,
Al principio, explicaré la clase abstracta y su uso, y más tarde pasaremos a las Interfaces.
la clase abstracta no es nada especial cuando se quiere diferenciar con una clase regular. Pero tiene algunos métodos que no se implementan, o solo se declaran, no se definen. En ese caso, todos esos métodos y la propia clase se renombran con la palabra clave «abstract».
una clase abstracta puede tener uno o varios métodos no implementados.,
como una clase abstracta no es apropiada, o no tiene métodos idealmente definidos en comparación con una clase regular, por lo que las clases abstractas no se pueden instanciar, lo que significa que no podemos crear objetos directos de clases abstractas.
las clases que heredan / extienden esta clase abstracta, tienen que implementar/definir todos los métodos abstractos de la clase abstracta padre.
si alguna clase no define ninguno de los métodos abstractos, esa clase también se convierte en una clase abstracta.,
uso (un caso de estudio imaginario):
supongamos que, en 1995, ha diseñado una clase de automóvil que tenía una característica adicional: podía volar. Diseñaste la clase de coche muy bien, todos tus métodos eran muy estándar y eficientes, pero en ese entonces, sabías que era bastante imposible implementar el método carFlying (). Por lo tanto, usted acaba de mantener el método carFlying() en blanco, o sin implementar (ahora usted sabe que es un método abstracto, así como la clase!).,
Hoy, quiero implementar ese coche volador que ya has diseñado y la tecnología ya no es imposible. El coche que voy a construir tiene todas las características similares a su coche, y, además, puede volar. Entonces, lo que puedo hacer es heredar («extends» -para Java) tu clase abstracta y debo definir/implementar ese método abstracto carFlying (). aquí tienes! nuestro coche volador está listo para rodar.
por lo tanto, siempre que tengamos algunas características comunes o comportamiento entre varios objetos, podemos hacer una clase abstracta general con esa característica como método implementado., Pero esos objetos podrían tener comportamientos distintos, en ese caso, declararemos un método abstracto e implementaremos esos métodos abstractos de manera diferente según la necesidad del objeto.
ejemplo de clase abstracta:
Una vez más, consideremos un ejemplo, un grupo de luchadores obtienen la misma cantidad de dinero por hora para jugar. pero tienen música de tema diferente y estrategia de lucha final. Por lo tanto, podemos mantener el método de pago igual para todos y tenerlo implementado en una clase llamada Wrestler., declaremos los métodos themeMusic() y finisher() como abstractos porque estos dos tienen que ser implementados de manera diferente para diferentes objetos en algunas otras clases que heredan nuestra clase abstracta de luchador.
y el principal.java:
interfaz:
Si ha pasado por la parte superior de este tutorial correctamente, comprender la interfaz será muy fácil para usted.
La interfaz no es una clase, es solo una interfaz. Tiene algunos métodos sin cuerpo dentro de él, solo la firma del método (son básicamente métodos abstractos!,), y puede tener algunas variables finales y estáticas. Y, una clase típica «implementa» interfaces, no «extiende».
se pueden implementar múltiples interfaces (generalmente, heredadas) a la vez.
Las clases que heredan / implementan las interfaces, deben definir todos los métodos abstractos de la interfaz.
Los métodos dentro de las interfaces son por defecto públicos, vacíos y abstractos.
la interfaz es una especie de herencia múltiple en el lenguaje de programación Java.
no podemos crear instancias de interfaces también como las clases abstractas., Porque son entidad incompleta, y no se debe permitir que se realicen. Pero a veces una actividad como instanciar puede ser aplicable para ello con la ayuda de la clase interna anónima. Esa no es nuestra agenda de hoy.
uso de la interfaz:
Las Interfaces ahorran tiempo de codificación. Puede contener algunas variables estáticas y finales a las que se puede acceder globalmente. y algunos métodos que son abstractos y fácilmente disponibles para su uso posterior en cualquier momento para quien implementa la interfaz.,
ejemplo de interfaz:
en el ejemplo anterior de clase abstracta, vimos que un método era el mismo para todos los que tenían un cuerpo dentro de la clase abstracta y otros métodos eran abstractos. pero para las Interfaces, todos los métodos son ahora solo firma. La clase StoneCold implementa la interfaz del luchador y define los tres métodos abstractos de acuerdo a su necesidad.
esta vez, diferentes luchadores obtienen diferentes cantidades de dinero por hora. Por lo tanto, es lo más conveniente poner el mismo método que abstract y definirlo en otro lugar de acuerdo con la necesidad del objeto.,
public interface Wrestler {
public abstract void paymentForWork (int hours);
public abstract void themeMusic();
public abstract void finisher();
}
y la siguiente clase implementa la interfaz del luchador.
Para el principal.java:
para iniciar objetos en caso de clase abstracta o interfaz, puede tener en cuenta lo siguiente,
A obj= new B();
//where A is an interface/abstract class. B is the concrete(implements/extends "A”)class which gives it’s memory to A’s obj to have access into B class and utilize its defined methods.