Como sabemos que podemos declarar solamente la firma del método y también no se puede crear la instancia de una interfaz. entonces, ¿por qué necesitamos la interfaz? Innecesario es su carga en JVM. Esta es también una degradación del rendimiento. Estamos creando la interfaz y varias clases implementando esa interfaz y definiendo todos los métodos de la interfaz. En realidad, lo que logramos de esta interfaz. ¿Podría darme algún ejemplo?por eso que necesitamos interfaz en lugar de la clase y lo que estamos logrando desde la interfaz
Respuesta
Interfaz es que está obligando a su cliente a implementar algo específico, la implementación seguirá siendo para el cliente. También Java no es compatible con herencia múltiple al extender múltiples clases, puede tener múltiples interfaces implementadas.
Por ejemplo: List
declara add(..)
método toda la implementación de List proporciona implementaciones.
Simpler sería.
Defina una interfaz Animal
y un método speak()
significa que todos los animales deberán tener que hablar con diferentes implementaciones diferentes. El hombre hablará, el perro ladrará, el león rugirá.
¿Por qué deberíamos ir para crear la clase Animal extra? Podemos declarar el speak() en cada clase. Lo que es apropiado obtendremos de la clase Animal e implementaremos speak() en todas las subclases. Todavía no he tenido este concepto
principal ventaja es la herencia y polimorfismo [conceptos fundamentales de la programación orientada a objetos]
Estás especificar el comportamiento del animal aquí también.
Puede tener
Animal obj = new Man();
Animal obj = getAnimalForThisCriteria(something here);//this will return some animal at runtime so you can catch instance using Animal.
Es posible que tenga tres clases Ma diferente, perro, león con el mismo método, pero no hay forma de saber que todos ellos son animales a menos que se extiende o se implementa la clase o interfaz común, aquí viene el concepto de estructura
¿Por qué deberíamos ir para crear clase Animal extra. Podemos declarar el speak() en cada clase. Lo que es apropiado obtendremos de la clase Animal e implementaremos speak() en todas las subclases. Todavía no entendí este concepto. – Nishi
Comprobar la actualización ......... –
@JigarJoshi buena explicación +1 – SpringLearner
Tener interfaces separadas de las clases permite despejar separación entre, bueno, la interfaz de un objeto y su implementación. Sin ellos, no tendrías una forma estándar de indicar que alguna clase no debería contener ningún detalle de implementación.
En segundo lugar, ya que Java no soporta herencia múltiple, las interfaces son una solución parcial, permitiendo que la herencia de las características externas de la clase.
interfaces son para cuando sólo se preocupan por la capacidad de un objeto, no cómo les alcanza.
Supongamos que está escribiendo el código de control de alto nivel para un robot. No le importa cómo funciona realmente el robot, solo quiere poder avanzar, retroceder, girar a la izquierda o a la derecha, etc. Sin interfaces, implementaría una clase abstracta llamada AbstractRobot
que tiene todos los métodos como métodos abstractos. En este punto, básicamente has creado una interfaz, pero en forma de una clase abstracta, pero una que es 'más pesada' de lo requerido.
Por último, una clase puede ajustarse a múltiples interfaces de, pero sólo puede heredar de una clase. Esto permite algunos patrones de diseño que se basan en la herencia múltiple.
Trataré de explicar esto con palabras simples.
Considere su juego de computadora favorito, por ejemplo Counter Strike. En este juego, los jugadores (terroristas o antiterroristas) usan armas.
Si enseñamos al jugador cómo utilizar weapon
(análoga a la interfaz), se puede utilizar cualquier arma como AK47
, Maverick
, Shotgun
, Sniper
(análogo a las clases que heredan interfaz de arma).
La ventaja de esto es considerar Bazooka
(que implementa Arma) se desarrolla en versiones futuras. Entonces el jugador actual podrá usarlo sin ninguna modificación, ya que sabe cómo usar la interfaz de Arma :-)
Esto es solo un ejemplo simple. Hay muchas otras razones para usar interfaces.
Este ejemplo funcionaría incluso si las interfaces no existieran. Simplemente definirías una clase madre de Arma. –
Oh sí, eso es correcto. Pero es mejor usar Interface, ya que las clases podrán heredar otras clases. Si usamos la clase madre Arma, las clases derivadas no podrán heredar de ninguna otra clase debido a la inexistencia de herencia múltiple en Java. – Trivikram
Simple. Creo que las clases de Interfaces y Resumen son para el mismo propósito. La diferencia es: si extiende una clase abstracta, no podría extender ninguna otra clase en Java. Motivo: Java no admite Herencia Múltiple. Al mismo tiempo, puede implementar cualquier cantidad de interfaz para una clase.
¿Cuál debería usar, clases abstractas o interfaces?
considerar el uso de clases abstractas si alguna de estas afirmaciones se pueden aplicar a su situación:
- desea compartir código entre varias clases estrechamente relacionadas.
- Espera que las clases que amplían su clase abstracta tengan muchos métodos o campos comunes, o que requieran modificadores de acceso que no sean públicos (como los protegidos y los privados).
- Quiere declarar campos no estáticos o no finales. Esto le permite definir métodos que pueden acceder y modificar el estado del objeto al que pertenecen.
considerar el uso de interfaces de si alguna de estas afirmaciones se pueden aplicar a su situación:
- Se espera que las clases no relacionadas podrían implementar su interfaz. Por ejemplo, las interfaces Comparable y Cloneable son implementadas por muchas clases no relacionadas.
- Desea especificar el comportamiento de un tipo de datos en particular, pero no le preocupa quién implementa su comportamiento.
- Desea aprovechar la herencia de tipo múltiple.
El uso más importante de las interfaces como lo veo es pasar el código (anonymous inner class o lambda) a un método como parámetro.
Ejemplo:
Supongamos que queremos hacer un método que puede regresar el tiempo de ejecución necesario para ejecutar una pieza de código. Queremos pasar nuestro código como un parámetro para este método.
interface Code{
public void run();
}
long getExectutionTime(Code code){
long startTime = System.nanoTime();
code.run();
return System.nanoTime() - startTime;
}
getExecutionTime(new Code(){
public void run(){
//the code to be executed
}
});
en Java 8,
getExecutionTime(()->{
//the code to be executed
});
interfaz no es nada, pero es una línea de guía para la nueva aplicación proporciona algunas instrucciones para la nueva aplicación y categorizar la funcionalidad del objeto .En detalles como si creamos una interfaz y luego creamos una instrucción para la implementación.
Una analogía para una interfaz es pensar en una clase que usa una interfaz como si fuera una toma de corriente eléctrica, y pensar en la implementación como el enchufe. A la salida no le importa lo que hay detrás del enchufe, siempre que se ajuste a la toma de corriente. En términos psuedocode podría escribirse así:
public interface ElectricOutlet {
public void powerUp();
}
y una clase que implementa ElectricOutlet podría tener este aspecto:
public class Appliance implements ElectricOutlet {
//member variables
public void powerUp() {
//Draw power from the wall
}
...
}
Entonces, ¿cómo utilizar la interfaz? De esta manera:
//lots of other code
ElectricOutlet out = new Appliance(); //plug the appliance into the outlet
out.powerUp; //power it up!
Por supuesto, esto no tiene por qué ser un aparato que se conecta a una toma de corriente. Puede ser un televisor, una computadora portátil o una cortadora de césped, pero todos se comportan de la misma manera desde el punto de vista de la toma de corriente. Entonces, ¿cómo se aplica esto a la programación? Exactamente de la misma manera:
List<String> list = new ArrayList<String>(); // create a new List of Strings
acabo de crear un nuevo (vacío) lista de cadenas. Si resulta que ArrayList no proporciona el rendimiento correcto, y LinkedList funciona mejor, puedo volver atrás y cambiar esa línea para esto:
List<String> = new LinkedList<String>(); //should work better now
puedo hacer esto porque tanto ArrayList y LinkedList implementan la interfaz Lista , y así proporcionan el mismo comportamiento (API), aunque las implementaciones internas pueden ser diferentes. Sin embargo, desde el punto de vista de la Lista, no importa el funcionamiento interno, siempre que la interfaz esté allí. Esto permite mucha independencia entre las clases y permite una mayor reutilización.
- 1. por eso que necesitamos WCF
- 2. ¿Por qué necesitamos la interfaz IEqualityComparer, IEqualityComparer <T>?
- 3. StarUML que define los métodos y atributos de la interfaz en el icono de la interfaz?
- 4. clase genérica que se extiende clase y aperos de interfaz
- 5. Función que implementa la interfaz
- 6. genérico Clase base que hereda de la interfaz genérica
- 7. Por qué las clases se compilan en .class pero la interfaz no lo hace. Interfaz
- 8. Clase interna en la interfaz vs en la clase
- 9. Crear tipo que implementa la interfaz interna
- 10. ¿Puedo garantizar que estoy escribiendo en la clase Y la interfaz de un argumento?
- 11. En caso de que una interfaz herede otra interfaz
- 12. Interfaz que implica la implementación del indexador
- 13. ¿Puedo implementar una interfaz que contenga una propiedad que sea de tipo hijo a la requerida por la interfaz?
- 14. ¿Cómo navegar a implementar clase desde la interfaz en Eclipse?
- 15. lo que se entiende por aplicación por defecto de una interfaz
- 16. Interfaces C#: ¿Es posible hacer referencia al tipo que implementa la interfaz dentro de la interfaz?
- 17. C# enum en la interfaz/clase base?
- 18. Subclases de una clase que implementa una interfaz genérica
- 19. ¿Cómo envolver la clase en Java y guardar la interfaz?
- 20. Añadiendo nuevo método en la interfaz de Java por lo que implica cambios mínimos a las clases que heredan
- 21. ¿Cómo puede el servicio Android actualizar la interfaz de usuario de la actividad que lo inició?
- 22. Force Singleton Pattern en una clase que implementa una interfaz
- 23. Lanzando una interfaz a otra interfaz que no hereda
- 24. ¿Por qué debería preferirse la interfaz para una clase Java?
- 25. ¿Para qué sirve crear una clase dentro de la interfaz e interfaz dentro de la clase
- 26. clase interna dentro de la interfaz
- 27. Cómo generar una clase desde una interfaz
- 28. ¿Por qué necesito la interfaz?
- 29. ¿Se puede usar OnDeserializedAttribute en lugar de la interfaz IDeserializationCallback?
- 30. Obtenga solo la interfaz directa en lugar de todas?
posible duplicado de [Java: interfaz/clases abstractas/método abstracto] (http://stackoverflow.com/questions/2124951/java-interface-abstract-classes-abstract-method) –