| ||||
no necesariamente. Puede ser implementado por una subclase abstracta que solo implemente 2 o 1 metodo. Ahora, si la clase que implementa, no tiene que ser abstracta, entonces si, tiene que implementar los 3 metodos abstractos Por ejemplo, suponiendo que la clase abstracta padre es esta:
Código:
una clase que implemente uno o 2 de los metodos sería asi:abstract class UNO { abstract void metodo1(); abstract void metodo2(); abstract void metodo3(); }
Código:
pero necesitarias de otra clase que implemente los metodos que faltan:abstract class DOS extends UNO { void metodo1() { //codigo } }
Código:
Otra opcion es hacer que directamente la clase hija implemente todos los métodos:class TRES extends DOS { void metodo2(){ // codigo } void metodo3(){ // codigo } }
Código:
Lo unico que tienes que recordar, es que si una clase no implementa todos los metodos de su padre, o de si mismo, entonces debe ser declarada como abstracta.class DOS extends UNO { void metodo1(){ // codigo } void metodo2(){ // codigo } void metodo3(){ // codigo } } Saludos. Espero haber aclarado tu duda.
__________________ http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux |
| ||||
Una de las utilidades de las interfaces, es que podes separar la definicion de la clase de la implementacion de la misma. Por ejemplo: si tienes una clase que hace busquedas en arrays de numeros, mediante el metodo de busqueda lineal, y luego decides cambiarlo por la busqueda binaria, el unico cambio que tienes que hacer es la implementacion del metodo de busqueda en la clase que implementa la interfaz. Saludos
__________________ http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux |
| ||||
Las interfaces se utilizan para brindarle un comportamiento dado a objetos que son diferentes, me explico mejor, una via de hacer esto es mediante la herencia, un ejemplo seria una aplicacion que debe hacer notificaciones, por ejemplo seria notificar a un email, a un beeper, un movil, a la misma aplicacion o a otra aplicacion, seria aconsejable tener una clase "Notificador" con un metodo que es abstracto, que seria "notificar" por llamarle de alguna manera, este metodo es comun a todos, lo que cada objeto lo implementa diferente, entonces creamos un objeto que heredaria de "Notificador" para cada nueva clase (EmailNotificador , BeeperNotificador, etc) que sobrescribiria el metodo notificar(los otros metodos se heredarian de la clase superpadre), que ventajas te da esto??? evitar repetir codigo que es comun a una familia de clases, te da la posibilidad de llamar de igual manera a un objeto y que haga acciones diferentes por ejemplo tendra una lista notificaciones pendientes que contendria n cantidad de EmailNotificador , BeeperNotificador, etc luego si quiero notificar puedo recorrer la lista llamando al metodo "notificar" y vamos recorriendo objetos llamandolos de igual manera y obtenemos diferentes comportamientos, que pasa cuando tienes una objeto que no es una notificacion sino que es algo completamente diferente pero que necesita notificar no podemos decir que esta es una especializacion de “Notificador” seria un error poner este nueva clase a heredar de “Notificador” y ahi es donde entran las interfaces las cuales no son mas que una serie de metodos que debe implementar la clase que la necesite, entonces declarariamos una interface que se llama Ej Notificar y todas las clases que necesitarian notificar entonces implementaria esta interface, esto te brinda un codigo mucho mas flexible a cambios, claridad, y permite que tus objetos se puedan relacionar de manera mejor. Espero que haya sido capaz de explicarme de la mejor forma de todas maneras te recomiendo que estudies un poco de Programacion Orientada a Objetos esto te va a ayudar mucho sobre todo en un lenguaje que es Orientado a Objetos salu2 miguel_e |
| ||||
Cita: Ya que estamos hablando de interfaces y herencia múltiple:
Iniciado por Tipdar Otra cosa... Java no permite herencia múltiple... pero sí implementar cuantas interfaces necesites... ¿Como resuelve Java el problema del diamante? Osea, si tenemos una interfaz:
Código:
Y luego definimos una clase que implemente a estas 2 interfacesinterface A { public int atributo1; } interface B extends A { public int atributo2; } interface C extends A { public int atributo3; }
Código:
Como hace java para solucionar el tema del atributo1 duplicado?class D implements B,C{ public int atributo4; } Programandolo en eclipse, al tratar de leer el atributo 1 en una clase tipo D, eclipse me dice que el atributo no existe, lo cual es mentira ya que es publico y esta definido en una clase superior. ¿Alguien sabe por que ocurre esto?
__________________ http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux |
| ||||
Las interfaces no brindan las posiblidad de heredar atributos, solamente metodos, creo que te refires al problema de que ambas interfaces contengan metodos que se llamen igual, igual lista de parametros y devuelvan lo mismo, y la clase que implemente las dos interfaces no puede implementarlo a los dos, por lo que he leido esto se resuelve si puedes renombrar el metodo de una interface, sino estas frito revisa el link este de todas maneras http://www.javaworld.com/javaworld/j...-diamond.html? salu2 miguel_e |
| ||||
Gracias por tu respuesta Miguel. Lei el link, y en este se explica claramente que heredar dos metodos abstractos que se llaman igual (tiene exactamente la misma declaracion) no genera problemas, ya que se copia solo una declaración. Se copia una sola ya que la otra es exactamente igual. Saludos
__________________ http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux |
| ||||
NO estoy muy seguro de que sea tan asi, porque, no necesariamente lo que vaya a devolver el metodo es igual para ambas interfaces, ojo que no me refiero a tipo de datos sino que para una interface puede devolver un dato totalmente distinto que para otra. no se si me explico correctamente igual me dices y que siga el debate salu2 miguel_e |
| ||||
Voy a ver que es lo que hace el compilador de java ante esta situacion.
__________________ http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux |
| ||||
Porbando en Eclipse, cuando heredo 2 metodos iguales que difieren solo en el tipo de retorno, no me deja compilar la aplicación.
__________________ http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux |
| ||||
no me referia al tipo de dato sino al valor como tal, por ejemplo ambas interfaces tienen un metodo X que devuelve un boolean y mi clase imlementa ambas interface, solamente tengo un metodo pero por el contexto de cada interface quizas una debe devolver true y otra false, que se hace en ese caso???? era a eso cuando me referia y te pasaba el link, no se si me copias salu2 miguel_e |
| ||||
Y eso ya entra en la mente del modelador, segun lo que quiera de cada clase. Igual es una situacion muy poco común, pero posible.
__________________ http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux |
| |||
Aunque heredes de dos interfaces, para el compilador y la JVM, el metodo es uno y devuelve un valor. No hay más. Lo llames a través de la interfaz que lo llames, solo hay una implementación, asi que no hay confusion posible. |
| ||||
el tema es cuando tienes dos metodos en 2 interfaces heredadas: en al interfaz 1: int metodo() y en la interfaz 2: long metodo() Para el compilador esto es una ambiguedad
__________________ http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux |
| |||
Exacto. Pero Miguel_e hablaba de dos métodos iguales en todo. Para el compilador ambas situaciones están claras, cuando los dos métodos son iguales sólo hay un método detrás. Cuando sólo cambian en el valor de retorno es un error de la clase y no compila. De hecho el error no tiene nada que ver con las interfaces. Probad a crear una clase con dos metodos que solo se distingan en el valor de retorno y vereis que no es cuestion de herencia ni nada, es cuestion de poder determinar sin confusión que método llamar en cualquier momento. Un saludo, D. |
| ||||
Si, eso es verdad, pero el planteo inicial tenia que ver con la herencia de clases. Saludos
__________________ http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux |