Curso Java. Interfaces y clases internas Interfaces II. Vídeo 50
HTML-код
- Опубликовано: 9 сен 2024
- En este vídeo hablamos de algunas propiedades de las interfaces y vemos con un ejemplo cómo crear interfaces propias.
Para más cursos, ejercicios y manuales visita: www.pildorasinf...
✅✅ ✅ ✅ ✅ Todos mis cursos gratuitos 👉 www.pildorasinformaticas.es ✅✅ ✅ ✅ ✅
🚀 ¿Quieres ejercicios? ¿Quieres más temario? 👉 www.pildorasinformaticas.es/course/java-tutorizado/🚀
🚀 ¿Quieres que te resuelva las dudas de Java? 👉 www.pildorasinformaticas.es/course/java-tutorizado/ 🚀
💥💥💥 Siempre seguiré subiendo cursos gratuitos por aquí. Gracias a todos por seguirme. 💥💥💥
es increible que hace 8 años existe este video y en la actualidad sigue siendo una joya, ojalá todos los cursos de programacion online sean asi deep learning como este. gracias por compartir este curso!
Yo lo estoy haciendo y me parece genial.
Gracias!!! Chévere 🍌 2024!!!. Nada como tomar una buena taza de café a primera hora mientras se revisa el material de JAVA... una día más un video más...
Hola, excelente curso, en estos 50 primeros videos he aprendido mas que en lo visto en la Universidad, muchas gracias por compartirlos.
Sergio Veloza Castillo Hola !! Gracias por el comentario. Me alegro de que te gusten los vídeos. Un saludo
Esta genial el curso. Ha medida que practico mi logica y mi entendimiento de las cosas se va incrementando. Aveces a las cosas solo hay que dedicarles tiempo y tener la actitud correcta.
Ha sido un camino largo para llegar a estos 50 videos, pero ahora veo a Java con otros ojos.
Gracias.
Ese era el objetivo. Un saludo!
Parace que llevas toda la vida enseñando programación. Aunque tengas un incentivo económico, que el trabajo que realizas esté disponible para todo el mundo es una gran labor. Educación de calidad sin importar tu clase social. Gracias Juan
no existen las clases sociales.
Uno entiende perfectamente contigo, y me atrevo a decirlo, eres el mejor profesor del mundo.
*Por si alguien no entendió el principio de sustitución...*
Mírenlos como cajas, imaginen que la SubClase es una caja pequeña y la ClasePadre es una caja grande.
Al momento de hacer :
Empleado director_comercial; // Estamos declarando una instancia llamada "director_comercial"
director_comercial = new Jefatura(" ", , , ); // Con esto creamos el objeto(instanciando) la instancia declarada arriba.
*Sé que es algo redundante pero ahora lo aclaro*
Gráficamente esto sería como intentar meter la caja pequeña(SubClase) en una caja grande(ClasePadre) por esta razón funciona perfectamente el principio de sustición.
-----------------------------------------------------------------
En cambio cuando hacemos lo opuesto
Jefatura director_comercial;
director_comercial = new Empleado(" ", , , );
ESTO ESTA COMPLETAMENTE MAL !!!
La razón es porque si lo vemos de manera gráfica, sería como intentar meter la caja grande(ClasePadre) en la caja pequeña(SubClase), resultando en algo imposible.
Se me ocurrió esta forma para poder memorizarlo fácilmente en un futuro, espero le sirva a alguien
50 Videos vaya que han sido Productivos muchas gracias por este magnifico curso
Gracias por el comentario. El curso tiene 278 vídeos (lo digo por si crees que este es el último). Un saludo!
Por fin llegué al 50 jaja Excelentes! vuelvo a agradecerte por compartir todos estos tutoriales.
Gracias por seguir el curso con tanto interés. Un saludo!!
Lo terminaste?
yo llevo hace 5 meses este curso y recien voy en el 50, pero esque trato de profundizar y que se me quede muy claro todo lo aprendido y ahora lo entiendo mucho mejor cada video cada termino que habla el profesor
@@luisafda.valdesg147 si, la verdad en su momento me sirvió muchísimo. Hoy cambie de rumbo al data science pero siempre agradecido de estos videos
@@germanalpascuadros3927 siii a mí me llevo un tiempo también, pero vale la pena, o por lo menos he visto otros cursos y no eran tan claros como este. Felicitaciones German por el esfuerzo!
Usted es un maestro, mi más grande admiración!!
Hola. Muchas gracias por estos vídeos que más que vídeos son clases magistrales donde vas más haya de un simple tutorial. Sos grande.
Gracias por el comentario. me alegro de que te gusten los vídeos. Un saludo!
Estudio en la Universidad y el orden de explicación de los conceptos es distinto a la hora de exponer la asignatura. Se nombran las interfaces en la introducción explicando por encima que es "el diseño" de lo que vamos a hacer después. ( Y así con otros muchos conceptos, que supongo que tiene su lógica para los que planifican la asignatura). La cuestión es que he estado haciendo este curso desde el video 0 a unos 5 videos por día y hoy he visto la luz!!! Es magnífico lo que haces y cómo lo haces. Seguro que vas a tener tu recompensa ( si no al tienes ya) por el esfuerzo y trabajo tan enormes que se aprecia que haces para elaborar estos cursos. PLAS.. PLAS, y mil gracias.
Muchas gracias por el comentario. Me alegro de que los vídeos te resultaran de utilidad. Un saludo!
👏👏👏👏👏👏👏 50 vídeos de los cuales ninguno deja duda alguna explicando. Gracias Juan
Gracias a ti por el comentario. Un saludo!!
Gracias profesor Juan, por compartir tanto conocimiento. Sin duda alguna el mejor profesor en linea.
excelente video, ayudo mucho a comprender todo, en el video anterior quedaba un poco en el aire todo pero este video puso todo en su lugar. Gracias por el curso!
Gracias a tus videos he empezado ingenieria informatica con una buena base de Java y me esta yendo muy bien, muchas gracias de verdad, espero que leas el comentario y sepas que me has ayudado mucho
Increíble como un curso tan antiguo le sigan contestando las dudas después de más de 4 años desde su creación, EXCELENTE TRABAJO, yo apenas pueda voy a dar algún aporte monetario porque si no lo hago me sentiría realmente mal, increíble que todo esto sea gratis! :)
Ya Casi LLego Swing Ufff Tanto Tiempo Esperando LLegar a esa parte... muy pero muy buen tutorial me ha servido bastantisimo
Me alegro !! Gracias por seguir el curso. Un saludo!!
Excelente vídeo y explicación.
Gracias por su trabajo y paciencia.
muy interesante, hasta ahora he aprendido muchas cosas, pero aun me cuesta encontrarle la logica a las interfaces y su utilidad
Estoy igual pero creo entender que serviria para que una clase haga algo que no es necesaria que otras clases mas abajo en la jerarquía hereden o mas arriva en la jerarquía de herencia tampoco la tengan ya que no deben implementar ese método. Ya veré si se me aclara en el próximo vídeo. Esta respuesta es como una nota mental imgino después de un año ya lo tiene mas claro que yo ahora
@@LibertCharrua Hola. ¿Qué conclusiones sacas o qué podrías aportar ahora sobre el tema, tras un año? :D Gracias. ;)
si señor video 50 👊jeje , lo mejor es que lo he comprendido todo gracias a que es el mejor profesor de la bolita del mundo!! muchas gracias maestro.
Ahora si mas o menos lo estoy agarrando al tema este
Gracias por el curso, me ayuda mucho a entender el lenguaje Java.
Enhora buena tio, estoy avanzado lento, pero con pasos firmes. Gracias.
Habìa visto antes el "instanceof", y no comprendìa muy bien
para que sirbia.!
Pero ahora lo entendì, muy bien.!!!
muchas gracias :)
Like si te pasas más de 10 minutos buscando un error que crees muy grave y resulta ser que te has olvidado una coma o has escrito mal una palabra :_D por favor espero no ser la única! jajajajaja Aprender a programar por mi cuenta no sé si lo lograré pero desde luego estoy desarrollando una paciencia que ni Yoda cuando conoció a Luke!
Hola. Gracias por el curso, es excelente. Ya alcance los primeros 50 vídeos. Espero comprender los temas que siguen. Las explicaciones son muy buenas. Gracias por subirlos. !!!
+Nicolás Chiesa Gracias por tu comentario y por seguir mis vídeos. Un saludo
Realmente didacticos y entretenidos. Muchas gracias.
Excelente!!! curso...,Felicitaciones!!! la verdad que es el mejor canal para aprender programación, desde ya agradecerte por compartir tus conocimientos, Saludos Cordiales.
Gracias por el comentario y por seguir mis vídeos. Me alegro de que te gusten. Un saludo!!
A ver nuevamente los videos 49 y 50... y pensar que recién llegaré a la quinta parte de todo el curso :,D
eres muy bueno educado ja que apredien c# y no llegaba a instanciar bien porque me daba error en todo los sitio y nunca pense poder con java . otra vez mucha gracias .eres un grande!!!!!!!
Muchas gracias por el comentario. Un saludo!!
Excelente explicación Juan!!
+AhoraVengo Gracias !! Saludos
A modo de resumen, según lo que he entendido:
Usamos interfaces debido a dos motivos:
1. Herencia múltiple
2. Uso métodos y constantes pertenecientes a otras clases (interfaces)
Es decir:
Una clase que implementa a otra, los métodos y constantes de esta segunda deben ser declarados en la la primera clase y por ese motivo, existe herencia múltiple.
Al declar un método en la interface debe declarse o no cómo public abstract pero al hacerlo en la clase que va a invocar a dicho método no se declara de dicha forma.
PD: ¿No deberíamos usar la modularización? El código es muy largo y existen diversos métodos...
Daniel Bernardo Graset, agregaría 3. Para obligar al programa a definir un comportamiento; perdón agrego algo quizas estupido, pero yo se lo agradecí a dios, para no escribir tantas veces System.out.println, simplemente pongan syso y presionen ctrl+space, Slds Muy bueno el curso Excelente el profe como siempre!!!
50 videos completados vamos con todo🤩
Ya quiero entrar a Swing...tengo como 4 horas en dos vídeos XD
jajajaja bien ahi.
yo tambien quiero llegar a SWING me duele el cerebro jaja
disculpa pero que es Swing?
Habism Oh ya,es como Tkinter de python.
Uff tio no sabes cuanto quiero llegar alli :')
Definitivamente hay que comprender perfectamente la programación orientada a objetos y sobre todo el tema de la Herencia para entender muy bien el principio de sustitución "Es un...", y también entender perfectamente el tema del polimorfismo, si no se comprenden bien estos temas los demás serán difíciles de entender. Os recomiendo comprenderlos bien para poder seguir avanzando en el curso. Me encantaría explicar en profundidad algunos detalles que no se mencionan en los videos, como lo he hecho en videos anteriores, pero son detalles muy abstractos que me resulta cada vez más difícil expresarlos y pierdo mucho tiempo. En verdad comprendan bien la Herencia, el polimorfismo, y el casting de objetos, para que no les cueste mucho trabajo seguir adelante. Les recomiendo que comprendan en profundidad (a nivel código) el principio de sustitución "Es un..." ahí está la clave de todo, ese principio utiliza la herencia y el polimorfismo, una vez que lo entiendan, ahora aplíquenlo en el casting de objetos (convertir un objeto de la subclase a uno de la superclase) ;) fácil verdad ?????? mucha suerte a todos !!!!!
Que videos o paginas recomiendas para reforzar o entender del todo lo que recomiendas?
4:15
Sandra es directora comercial de una empresa, gana 85mil euros y tiene solo 8 años. Increíble, y yo aquí aprendiendo a usar java para ver si saco un futuro.
El mejor tutorial de la historia.
Perfecto explicado y ejecutado... este fue el resultado que me salio a mi jejejeje
Un miembro de la directiva a tomado la decision de petar la empresa toda por los aires!!! :)
+Rey Relampago Cortina No es extraño. Ha pasado más veces ... Mucho estress
gracias por la clase
Saludos profesor....en este tema de las interfaces me he caído y aun no me levanto.... Gracias por el curso...
Profesor llegué al vídeo 220, pero lo he dejado porque no podré verlo con paciencia, pero espero terminarlo máximo en Marzo del otro año.
Tengo una duda, es con respecto a esto:
Comparable elwe2=new Empleado("john Lenon",85000,1990,12,17);
que beneficios tiene hacer este tipo de instancia empezando con la interfaz y terminando con la clase Empleado
se podría haber hecho así
Empleado elwe2=new Empleado("john Lenon",85000,1990,12,17);
me podría decir las ventajas, o es que está explicado en vídeos anteriores? aunque me he visto todos en orden hasta el 220
Hola, cuando el dice que se instancia del objeto Comparable quiere decir que el objeto instanciado de new Empleado va a adquirir todos los metodos que tiene la interfaz comparable, es decir, solo usas las interfaces para que las clases instanciadas por otros objetos y que se guarden en el tipo de objeto interfaz tengan los metodos de esta.
@@santiagoluna4273 Hola. Yo también tengo la misma duda que tenía el compañero
@walterjosesuarezdelacruz1495 No entiendo para qué sirve instanciar de esta manera. La explicación que diste no la acabo de comprender. La instancia de Empleado ya hereda los métodos de la clase, entre los cuales ya se encontrará el que se tuvo que sobrescribir obligatoriamente (compareTo) al implementar la interfaz Comparable.
Bien, esta clase si fue muy fácil de entender y en comparación con el "enum" del vídeo 48 esta se ve aún más simple.
El vídeo anterior (49) me costó entenderlo porque no sabia exactamente lo que hacia el «this» resulta que es muy simple lo que hace, solo que en el vídeo donde se explicó no lo entendí correctamente, pensé que el «this» hacía referencia a la variable de clase, pero no, hace referencia a las variables de los objetos de la clase "Empleado", o sea, a las "copias" de esta (como explicó el profesor Juan en uno de sus vídeos). Al menos así es como yo entiendo su funcionamiento, espero no estar equivocado, si alguien puede corregirme lo agradeceré.
Por cierto, el código funciona correctamente sin el this. al menos en esa ocasión, en otras si podría presentar problemas no colocarlo.
Fenomenal explicación
Llegue a la primera estación me falta cada vez menos en hacer Cumbre...Gracias Profesor....Agradecido..
Gracias.
gracias por tanto!
Excelente video
buen video, muchas gracias, es hora de ordenar un poco mi codigo
Siguiendo con la pregunta anterior, ¿se puede dar el caso de que nos interese hacerlo de esa forma en algún caso? Porque veo que se puede hacer pero no le veo las ventajas. Muchas gracias de nuevo.
Maravilloso.
Gracias !!
Hola, Excelentes videos... Eres un gran profesor. Despues de ver estos primeros 50 videos tienes ejercicios donde podamos aplicar todo lo visto o recomendar alguna pagina de ejercicios.
Gracias por compartir todos estos videos.
eso tmb digo doc
profesor y bueno compañeros tambien queria agregar algo para que no sea motivo de confunsión cuando esta en el power point y esta explicando como debemos usar el INSTANCEOF....
me di cuenta que el ejemplo en el power point deberia ser el siguiente
Compable ejemplo = new empleado(" Antonio" 56000,2013,10,3);
if (ejemplo instanceof comparable){
Es curioso que la media de visualizaciones en los videos era de mas de 100.000 y cuando se ha llegado al capitulo de las interfaces la gente gente se ha desanimado, ahora es el momento de seguir
Siempre pasa en los cursos: es ley de vida. En los cursos presenciales es igual: el primer día de curso la clase está llena. A medida que avanza van apareciendo sillas vacías. Un saludo!
@@pildorasinformaticas Mas claro no se puede explicar, a dia de hoy la inspiracion divina que yo sepa no existe lo que existe es el trabajo y la constancia
Buenas Profesor, sus videos son excelentes ahora mismo voy por el 51, pero quisiera saber hasta donde debo llegar para poder pasarme a Android?.
Hola !! La verdad no sabría decirte un nº exacto de vídeo hasta el que debas ver, pero recomiendo ver los temas de POO, Threads, Excepciones y eventos. JDBC tampoco vendría mal. Un saludo!!
Estimado, aún no entiendo muy bien algo.
¿En qué casos se usa interfaces?
Eso depende de como vas a organizar tu proyecto. No se si me explico
Se usan las interfaces en vez de la herencia multiple, ya que esta ultima no existe
Herencia multiple. Digamos que estas creando un videojuego, hay distintas entidades: pajaros, zombies, aliens, etc y la gran mayoria de estos tienen un metodo en comun, acuchillar gente y deben de tenerlo si o si. Como ves estas entidades son muy distintas entre si, y lo unico que la mayoria de estas entidades tienen en comun es el acuchillar gente, implementar la interfaz donde solo hay un metodo: acuchillarGente(); bastara. Entonces las entidades que acuchillen Gente simplemente se les implementa la interfaz, se les coloca su metodo y listo.
Por que no usar Herencia por clase? bueno, si queres que si o si tengan el metodo cuchillarGente() con herencia por clase no se podria, porque no es obligatorio usar los metodos heredados.
Supongamos que tengo una clase abstracta con el metodo acuchillarGente() y esta le va a heredar a cada clase que acuchille gente, bueno, esta genial y seguramente sirva el codigo, nadie dira que no, pero con interfaz es mucho mas facil porque digamos que si en algun momento me interesa tambien agregar la funcionalidad de hacer caca a la gente pues no podria heredar este metodo a otras clases porque no existe la multiherencia, pero con la interfaz si se puede y ademas lo hago una obligacion implementar los metodos abstractos para las clases que yo quiera de esa forma me aseguro que tengan los metodos y que ademas pueda hacer "herencia multiple"
@@Abstractor21 gracias 🤩
@@nataliegomez480 me alegra haber ayudado
Llegado este punto, he de complementarlo con teoría y otros cursos
He aprendido bastante!!! eres buen docente!! y es un excelente canal!! y agradezco, pero estoy en desacuerdo en que las clases las hagas en un mismo archivo, eso confunde bastante! o al menos en mi caso asi lo es!! no comprendo cual es el objetivo de hacerlas asi
+alberto herdez Hola !! Gracias por el comentario. Al comienzo del curso expliqué que una buena práctica en programación consiste en "modular" un programa, es decir, dividirlo en módulos, partes (lo que serían archivos en Java). En la parte dedicada a POO así lo hago para que se vea en qué consiste, pero en el resto del curso para aplicaciones sencillas lo hago todo en el mismo archivo. Es cierto que esto puede confundir, pero uno también tiene sus manías que cuesta abandonar. Un saludo!!
Tengo una duda existencial, quizá ya no por las interfaces en sí, si no posiblemente por la aplicación de la Interfaz Jefes en este ejemplo en concreto.
¿Qué diferencia habría en este caso entre implementar una interfaz Jefes para estar obligados a desarrollar un método tomaDecisiones si podemos crear ese método directamente en la clase Jefatura y dejarlo hecho? Es decir, en ambos casos la clase Jefatura tendría dicho método. ¿Porqué utilizar una Interfaz para ello?
Por ejemplo, entiendo que en la clase Persona escribamos un método abstracto para la descripción, porque entiendo que TODAS las clases que hereden de Persona tienen que tener ese método y desarrollarlo dentro de esas clases.
Entonces si viene otro programador y quiere crear una clase que herede de Persona, estará obligado a implementar ese método y a desarrollarlo como quiera.
Pero en el caso de la interfaz Jefes, si viene un programador y quiere utilizar la clase Jefatura, en la que obligatoriamente tiene que haber un método tomaDecisiones, ¿qué más le dará que esa clase implemente una interfaz para tener un método tomaDecisiones en la clase Jefatura que tener el método creado directamente ya en la clase?
No sé si me hago entender.
En este sentido entiendo muy bien, dentro de la herencia, el porqué de los métodos (y por ende de las clases) abstractas. Pero con las interfaces no llego a comprenderlo del todo. Entiendo que escribiendo una interfaz, si una clase implementa esa interfaz está obligada a implementar todos sus métodos, pero si quieres que esa clase tenga esos métodos, ¿porqué no escribirlos directamente dentro de la clase?
Es posible que luego a lo mejor al desarrollar la idea de interfaz o al desarrollar el ejemplo mas adelante, posiblemente acabe teniendo sentido para mi, pero ahora mismo no alcanzo a comprenderlo. Por eso dije al principio que es posible que sea por el ejemplo y no por las interfaces en si, porque por ejemplo, con la interfaz Comparable o con otras interfaces ya escritas que he tenido que utilizar (para midlets y esas cosas) si que les veo el sentido.
+Carlos Periañez Hola !! ¿Cómo harías si eres un programador que quiere heredar de Jefatura pero la clase que estás construyendo ya hereda de otra que no es Jefatura?
+pildorasinformaticas Supongo que la solución sería crear una interfaz, en este caso utilizar la interfaz Jefes, metiendo quizá algún método más ¿no?
+Carlos Periañez Metiendo un método más en el caso de que lo necesites. Pero efectivamente como Java no tiene herencia múltiple, la única forma de hacerlo sería utilizando una interfaz.
Un saludo
+pildorasinformaticas Muchas gracias profe. Todo mas claro ahora.
Saludos Juan, excelente curso. Una duda en el uso de - instanceof - se pregunta que si es de tipo de clase Empleado para decir que es de tipo Jefatura. Gracias por tu atención. min 6:00
A. Cesar Cortes O. ¿Me equivoqué? Lo revisaré. Gracias por la advertencia. Un cordial saludo
Hola ! Muchas gracias por los videos, el curso es excelente y muy bien explicado.
Alguien tiene ejercicios para practicar que pueda compartir?
Saludos :)
+Agustín Chávez Es mi intención ir colgando ejercicios en mi web para compartir... pero lo llevo diciendo hace tiempo. A ver si saco tiempo. Un saludo
Minuto 4:25 una minúscula acotación para los que viene atrás, Juan dijo "un jefe siempre es un directo comercial", lo que realmente quiso decir es que un Jefe (una instancia de la clase Jefatura clase hija) SIEMPRE ES UN EMPLEADO (clase padre empleado), principio de sustitución "Se puede usar un objeto de la clase hija, SIEMPRE que el programa espero un objeto de la clase padre, por la regla SIEMPRE ES.... por ahora vamos bien, a ver que tal cuando en producción toque mirar n cantidad de líneas de código y n cantidad archivos/ficheros hechos por otros, con otra lógica
El curso es muy bueno, no obstante, debería realizar nuevo código, aunque sea simple, para explicar los temas nuevos.
Gracias
+pildorasinformaticas Llevo semanas esperando a llegar a Swing (segun yo, son las aplicaciones gráficas que se le pueden dar, y como me quiero dedicar a diseño de videojuegos...)... Muchas gracias por todo lo que me has enseñado :D No falta mucho para entenderle al 100% a la estructura de Java y entrar en Android? :D
+Alfonso Izaguirre Hola !! Gracias por el comentario. No, no falta mucho. Con entender la POO, las excepciones, los eventos.... es suficiente. Un saludo
Si lo que quieres es hacer videojuegos te recomiendo utilizar un engine como unity y unreal engine 4, no digo que no se puedan hacer en Java, solo digo que si haces este curso por el desarrollo de videojuegos los engines te facilitan mucho el trabajo además ellos se encargan de que tu juego se pueda ejecutar en cualquier plataforma
Excelentes videos, gracias de antemano. Sin embargo, pienso que todo el curso lo esta haciendo en un solo fichero y me queda demasiado desordenado y pues, provoca confusion en algunos estudiantes. Pienso que eso se puede mejorar. Saludos"
Ingeniero muchas gracias por su canal, la verdad es de muy gran utilidad y me ha servido muchisimo.Ahora tengo la siguiente duda con respecto al codigo de instanceof.Empleado director_comercial=new Jefatura("Sandra",85000,2011,4,5);
Comparable ejemplo = new Empleado("Elizabeth",89000,2000,2,1);
if(director_comercial instanceof Comparable){
System.out.println("porque???");
}
if(ejemplo instanceof Empleado){
System.out.println("tambien porque???");
}Como puedes ver en el codigo, los if los realice con director commercial y comparable. Y el otro entre ejemplo y Empleado.
En ambos casos entra en el If imprimiendo los S.O.Pln
A que se debe?
muchas gracias por su ayuda
hola juan primeramente agradecerte por tu paciencia y dedicación en los vídeos , quería saber algún consejo para que tanto código , sintaxis, reglas, aprendiendo asta ahora no se me haga un rompecabezas con las piezas desordenadas es decir que me olvide tal sintaxis o como era , tomo apuntes siempre.
+alan melgar Hola !! Gracias por el comentario y por seguir mis vídeos. Lo normal es que alguien que aprende un lenguaje complejo como Java desde 0, es que haya momentos que se vea desbordado por tanta información, tanto código y tanta instrucción. Lo importante es entender bien los conceptos: por ejemplo la POO, qué es una clase, una instancia, la herencia, la encapsulación etc. Es normal que haya que ver varias veces los vídeos para entender algunos de estos conceptos, y también recomiendo buscar información en otros sitios (google, otros canales de youtube etc) cuando algún concepto no se entiende. Cuando algo te lo explican varias personas diferentes, al final siempre se termina entendiendo.
El resto de cosas como la sintaxis, acordarte de las llaves, los puntos y comas, del nombre de los métodos etc son cosas menos importantes ya que se aprenden con la práctica. Además siempre tienes la API de Java para consultar y por supuesto también Google.
Un saludo!!
Gracias juan por responder , El unico concepto complicante es el polimorfismo pero le llegare a entender a paso del tiempo 😅.
min 13:30 con referencia a las interfaces, si hubiésemos declarado el método para subir incentivo dentro de la clase jefatura, nos hubiésemos ahorrado la interfaces, y así obligamos a que la usen todas las clases que extends de esta. no?
o es necesario hacerlo con interfaz.
en si el uso de la interfaces creó entenderlo pero no me queda 100% claro de cuando debo usarlo.
+juanpamontoyav Hola !! Si creas el método dentro de la clase Jefatura, las clases que hereden de Jefatura tendrán ese método. Pero es muy probable que las clases que extends de Jefatura no necesiten que el método sea igual que el de Jefatura. Por ejemplo imagina que una clase llamada "Dirección" hereda de Jefatura. esta clase Dirección hereda el método para subir incentivo, pero lo más probable sea que no nos sirva porque el incentivo a subir no será el mismo en un Jefe que en Director.
Antes esta situación, el programador puede ser que se le "olvide" sobreescribir el método subir_Incentivo que hereda de Jefatura en la Clase "Dirección" con lo que nos encontraríamos ante un error ya que este método no es válido para Dirección tal como se hereda de Jefatura.
El declararlo en una interfaz soluciona este problema ya que te OBLIGA a volverlo a escribir en la clase Dirección mientras que si lo heredas no te obliga.
Un saludo
Es decir que al no estar obligado a reescribirlo, podríamos causar un error ya que usariamos el método subir incentivo de la misma forma en clase Jefatura y clase Dirección.
(Y claro no tienen el mismo incentivo, uno ganas más que el otro jeje).
Muchas gracias por tus aclaraciones son muy valiosas, sigo retomando los vídeos, voy por el 60 pero repitiendo desde el 50 jeeje que cada vez se complican más y debo repasarlos.
Ya tendré tiempo para realizar ejercicios.
Gracias pildoras!!!
Exacto !! Veo que lo entendiste. Efectivamente, los vídeos se complican a medida que avanzamos. Espero que no sea un obstáculo insalvable para ti. Un saludo
He llegado al 50 y ya veo por partes....💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡
Me encanta el comentario del 17:51. Supongo que el profo tendra recuerdos personales xDD.
+Apo Apolo :))) siempre se acuerda uno de alguien...
Básicamente, las interfaces te obligan a imprementar metodos?
Una pregunta para estar seguro de este concepto. Cuando creabamos las clases abstractas ademas de tener metodos abstractos podian tener metodos "normales", pero en una interfaz estrictamente todo debe ser abstacto.
Correcto todo lo que dices. Un saludo!!
Hola excelente video y muy bien explocado, tengo una duda en el video tu comentaste que era "public abstract String metodo" = "String metodo", que era lo mismo ponerlo de una forma u otra, yo lo puse de la primera forma y cuando lo estaba implementando la interfaz en mi clase jefatura me salio error, mas no fue hasta cuando le borre el public abstrac que se soluciono, a que se debe eso si en teoria es lo mismo "Public abstract String metodo" = "String metodo ???
Adolf Hola !! Dime minuto y segundo del vídeo donde comento lo que tú dices, por favor. Un saludo
Excelente vídeo gracias, una duda si por ejemplo tengo una clase A que implementa una interface D, y tengo una clase B que hereda de la clase A, la clase B tiene obligatoriamente que implementar la interface D ??, gracias por cualquier info
Hola! ahora conociendo las interfaces, cuándo debería usar una clase abstracta y cuándo una interfaz?
Cuando necesites crear una estructura con métodos abstractos pero también con métodos que no sean abstractos, utilizarás una clase abstracta. Cuando necesites crear una estructura cuyos métodos son todos abstractos, utilizarás una interfaz. Mira esto: rocixcode.wordpress.com/2011/02/11/clases-abstractas-vs-interfaces/
Saludos!!
@@pildorasinformaticas Excelente respuesta.
hola buenas noches querido maestro. tengo una duda y es que de que me sirve crear una instancia de tipo interfaz, pero luego llamar al constructor de la clase que la implementa o de llamar a aun constructor que herede de la clase que implementa la interfaz.?? porque por ejemple, si que me sirve crear una instancia de tipo empleado, y luego llamar al constructor de jefatura, porque en este caso puede que si me interse volver a un empleado comun y corriente en un jefe... o acenderlo a jefe si asi lo ponemos..
Muy buenos
Gracias !! Un saludo!!
Básicamente se podría decir que una interfaz es una clase estrictamente abstracta?
una interface no es solo una directiva de que metodos se deben aplicar ? no me termina de cerrar que una interface pueda ser una instancia de una clase.
Tengo ahora mismo la misma duda. No entiendo el motivo, o mejor dicho, la necesidad. Entiendo que se pueda hacer, pero aún no soy capaz de ver para qué, su utilidad.
Si tú, después de estos dos años ya lo tuvieras claro, sería muy de agradecer que me lo explicaras, porfa. ;)
muchas gracias me a servido de mucho quisiera si es que se puede plantear un sistema de super mercado con control de ventas e inventario
Gracias por el comentario. Sí, claro que se puede. Todo es posible, pero es algo complejo y a estas alturas del curso aún no sabemos lo suficiente. Para hacer algo tipo inventario hay que manejar swing, eventos, threads y BBDD. Un saludo!!
Hola, te recomiendo que veas los cursos de este canal de BBDD access
¿Por qué utilizas una interfaz para ese método si se puede agregar a la clase jefe, no daría lo mismo? Esa es la duda que más tengo en clases abstractas e interfaces el concepto lo entiendo lo que no entiendo es cuando aplicar cada caso
Seria para asegurarte que otros programadores implementen ese metodo de manera obligada, si cada quien escribe ese metodo en la clase jefe que cada uno instancia, puede suceder que alguno omita el metodo o lo haga de manera diferente, simplemente es una manera mas de programar, como dice el profe píldoras para programar hay varios caminos y uno toma el que mejor entienda, personalmente uso las interfaces cuando tengo que usar un CRUD porque los metodos son los mismo sin importar que clase sea.
Hola, primero agradecer por hacer estos vídeos, en realidad son de mucha ayuda. Ahora bien, lo que pasa es que he intentado usar la clase jefatura instanciandola de esta forma: Empleado jefe=new Jefatura(parametros)... y además,
implementé la interfaz que realizaste en el vídeo a la clase Jefatura y veo que no es posible usar el método "tomar_Desiciones", ¿no debería funcionar teniendo en cuenta el principio de sustitución? Muchas gracias.
Yo tambien tengo esa duda, sin embargo en el codigo del video hay algo similar a esto:
misEmpleados[1]= new Jefatura("pedro",20000,2000,11,05);
y en otroa linea
Jefatura jefealmacen=(Jefatura) misEmpleados[1];
la posicion 1 del array misEmpleados lo esta declarado como Empleado y tiene los atributos de Jefatura pero no me deja usarmisempleados[1].tomar_decisiones como dices, ya haciendo la segunda linea de codigo que te muestro donde jefealmacen.tomar_decisiones ya es posible
hola juan gracias por tu enseñanza ; me queda una duda respecto a la ilustracion que usas en el minuto 2:00
donde clase empleado hereda directamente de la interfaz comparable cuando yo entiendo que esta interfaz esta paralela a clase empleado, y en el minuto 8:30 veo las interfaces al lado de las clases tal como lo he entendido.
y una pregunta adicional es : si otro programador decide crear otra clase que herede de jefatura , tambien estaria obligado a desarrollar los metodos de la interfaz jefes....
gracias por adelantado juan.
Hola muy buenas!, un saludo muy grande y como siempre infinitas gracias por compartir tu saber, se que estoy atrasado, pero me esforzaré para ir a la par (:.
Me surge la duda, se que es bastante obvio pero, tengo que poner el "implements" para que se obligue a la clase a implementar ese método cierto?, Si yo lo omito en teoría no pasaría nada.
Tengo esa pequeña duda, de ante mano mil gracias!!.
Juan BG Hola !! No recuerdo ya de qué hablábamos exactamente en este vídeo porque hace tiempo que lo grabé. El implements se utiliza en Java para que una clase lleve (implemente) una interfaz. Que una clase implemente una interfaz, obliga a que debas definir en esa clase todos los métodos de la interfaz.
Un saludo
Hola. Sigo con atención tus vídeo de herencia de java. Te pregunto. Tengo que resolver un problema con herencia y me gustaria que lo miraras para decirme si esta bien modelado antes de empezar a codificar. Si es posible porque medio te lo puedo enviar. Atte Dari Jorge (Estudiante)
Hola!!! En principio muchas gracias por el curso y por tu dedicación. Tengo una duda, si quisiéramos utilizar los métodos de una subclase, como en este caso es jefatura, con un objeto tipo empleado, que deberíamos hacer algún tipo de Cast?. En la misma linea, cuando defines el objeto director_comercial (Empleado director_comercial=new Jefatura (parámetros)) en este caso el director comercial no puede usar los métodos de la clase Jefatura aun siendo un jefe, ¿Tendría que hacer algún casting?
De nuevo un Saludo e infinitas gracias por el gran trabajo que haces
Daniel Hernandez Hola !! Podrías hacer un cast pero antes de eso te tienes que preguntar si el diseño de tu herencia es correcto. En principio no tiene mucho sentido en el diseño de la herencia tener la necesidad de utilizar un método de una subclase con una instancia de la superclase.
Un saludo
Algo que no entiendo, o tal vez no vi por torpe, al hacer el metodo tomar decisiones, pusiste tomar_decision(String decision) , anteriormente no declarabamos: this.decision=decision; ? por que esta vez no?
+Santiago de los Santos Hola !! hace tiempo que grabé este vídeo y no recuerdo que hacía en él. Dime por favor minuto y segundo del vídeo donde aparece la duda para que pueda ir directamente y responderte mejor. Un saludo
+Santiago de los Santos Según entiendo, no lo coloca porque es un método getter sencillo y no va a realizar ninguna ecuación ni nada por el estilo
Hola profe! A ver si lo entendí bien... las interfaces se crean para tener un mejor orden y asegurarse de que ciertas clases tengan métodos que deberían de tener por ser de ese tipo, cierto?
Gracias!
Ahora que se me ocurre (siempre se me ocurren las cosas después de comentar jaja, perdona), a ver, digamos que yo creo una interfaz diseñada para los Jefes. Sin embargo, le toca a otro programador crear la clase Jefe. Y éste la crea sin implementar la interfaz porque no sabía de ello o no lo quiso hacer.
Y ahí es donde viene mi pregunta: ¿Sería posible obligar a que una interfaz se conecte con cierta clase al crearla? supongo que no, ya que el programador pudiera crear una clase Jefatura, Jefes, JoF... como le venga en gana llamarla. Por lo que supongo que el programador encargado de crear las clases también debería crear las interfaces.
Y a ver, aquí viene una última duda, y perdona tanto rollo. Si el programador sabe que métodos debería tener una determinada clase, no sería como inservible la interfaz? porque lo único que hace es obligarte a crear ciertos métodos, hablo de las interfaces que uno mismo crea, de seguro hay muchas bastante buenas en la API y que sirven para todo tipo de objetos, como la de Array. No lo sé, creo que me enrollé un poco. Espero que comprendas lo que trato de expresar.
Gracias nuevamente profe!
"a ver, digamos que yo creo una interfaz diseñada para los Jefes. Sin embargo, le toca a otro programador crear la clase Jefe. Y éste la crea sin implementar la interfaz porque no sabía de ello o no lo quiso hacer. " Respuesta: Mala comunicación entre los programadores de un mismo proyecto. Esto ocurre en la vida real y luego hay por ahí aplicaciones con mucho código redundante que funcionan porque los milagros existen en informática.
" ¿Sería posible obligar a que una interfaz se conecte con cierta clase al crearla? ! Respuesta: No, no es posible.
" Por lo que supongo que el programador encargado de crear las clases también debería crear las interfaces." Respuesta: No necesariamente. Hay un montón de interfaces en la API de Java que estamos obligados a utilizar en nuestras clases (por ejemplo ActionListener para gestionar eventos) y no las hemos creado nosotros.
"Si el programador sabe que métodos debería tener una determinada clase, no sería como inservible la interfaz?" Respuesta: Al contrario, resultarán muy útiles cuando vayas a elaborar más proyectos. Imagina que creas un programa que calcula salarios. Este programa tiene varios métodos construidos por ti que calculan el IRPF, Tasa de seguridad social y un montón de cosas más a tener en cuenta en los cálculos de los salarios de los trabajadores. Lo haces sin interfaces y funciona.
Imagina que al cabo de una semanas tienes que volver a crear un programa muy parecido al anterior pero con algunas diferencias en los cálculos. Tendrías que volver a crear los métodos que ya hiciste en el otro programa con algunas pequeñas modificaciones. Imagina que meses después tienes que crear otro programa similar a los dos anteriores pero con alguna diferencia. Imagina que a lo largo de un año tienes que crear 40 programas similares pero con algunas diferencias entre ellos. Cada vez que tienes que elaborar un programa parecido, estás obligado a crear de nuevo los métodos del primer programa introduciendo algunas modificaciones. O bien hacer un copia-pega de los métodos del primer programa y después modificarlo a mano, o lo que es lo mismo, una chapuza.
Si tú intuyes que vas a crear muchos programas similares, que tendrán casi los mismos métodos con algunas pequeñas modificaciones, lo suyo es crear una interfaz con esos métodos comunes a tus futuros programas y después implementar esa interfaz en todos los programas que vayan a funcionar de manera similar. Es decir, REUTILIZACIÓN de código, uno de los paradigmas de la POO y marcar pautas en el diseño de tus programas (obligas a que tus programas tengan los mismos métodos. Todo ventajas: mismo diseño de programas similares y no se te olvidará incluir ningún método ya que la interfaz te obliga a ello) otro de los paradigmas de la POO.
Un saludo!!
magistral respuesta
15/04/2020
Hola Juan, tengo la siguiente duda.
Como la clase Jefatura hereda de la clase Empleado puedo hacer esto:
Empleado jefe_RRHH=new Jefatura("Juan",55000,2006,9,25);
Pero entonces, ¿el objeto jefe_RRHH de qué tipo es? ¿De tipo Jefatura o de tipo Empleado? Porque he estado probando y he visto que si lo hago así el objeto jefe_RRHH no puede realizar un método de la clase Jefatura pero... llamamos al constructor de dicha clase no? Tengo dudas ahí. Gracias!
Josep Montalt El objeto jefe_RRHH es de tipo Empleado. Este objeto debe poder utilizar todos los métodos de Empleado a no ser que el método de Empleado sea private. Si no te sale pon el código a ver si te puedo ayudar. Un saludo
Josep Montalt Hola! Estuve jugando un poco con el código, espero te ayude a comprender un poco mejor.
Para hacer uso de los métodos de la clase Jefatura, hicimos un casting de la siguiente forma:
Jefatura jefa_finanzas = (Jefatura)mis_empleados[5];
jefa_finanzas.setIncentivo(50000);
Solo se puede hacer casting para los empleados que son Jefes.
Haciendo uso de instanceof con el siguiente for each:
for(Empleado e: mis_empleados) {
String tipoI = e.getNombre() + ", objeto ";
if(e instanceof Empleado) {
tipoI += "Empleado";
}
if(e instanceof Jefatura) {
tipoI += ", Jefatura.";
}
else {
tipoI += ".";
}
System.out.println(tipoI);
}
Para los objetos en el arreglo que son Jefes, el for anterior nos mostrara en consola Empleado y Jefatura, por la herencia un objeto Jefatura es siempre un Empleado.
Juan pildorasinformaticas nos podría explicar mejor.
Juan pildorasinformaticas hace lo que puede con más de 100 dudas diarias de más de 10 tecnologías diferentes. No obstante hasta ahora el feedback de la claridad de las explicaciones es excelente
Uff!! llegué
Hola excelente curso felicidades y gracias por el mismo solo me surge una duda y es respecto a la sintaxis por que al intentar primero implementar una interface y despues heredear una clase me salta error y al ponerlos inversa me marca como correcto? les dejo el pedazo de codigo para que me entiendan ;) seria muy bueno si alguien me explicara porfavor:
public class pruebaH extends Jefe implements Jefes { **NO ME DA ERROR**
public class pruebaH implements Jefes extends Jefe { ** ME DA ERROR**
twiz1996 Hola !! Esto es simplemente una regla de sintaxis propia del lenguaje Java y que responde al trabajo interno que hace el compilador al pasar el programa a bytecodes. Lo primero que hace el compilador es mirar si la clase a compilar tiene superclases o no las tiene. Si le inviertes las intrucciones poniendo antes implements que extends le marcas al compilador que no hay superclases (ya que primero ve la instrucción implements) y después no entiende la instrucción extends. (se supone que ya debería de estar evaluada).
Como esto no es fácil de entender, mi recomendación es que se tome como una regla de sintaxis sin más. Las combinaciones que se nos pueden ocurrir al cambiar el orden de las instrucciones en un programa Java son infinitas (por ejemplo ¿alguien ha probado si funciona "class public" en vez de "public class"? y si no funciona ¿por qué?).
Si tenemos tiempo y ganas para probar estas combinaciones infinitas descubriremos que algunas funcionan y otras no. Si queremos encontrar la "lógica" y el sentido a estas combinaciones no tendremos tiempo para nada más.
Igual que los lenguajes escritos (español, inglés, alemán etc) tienen reglas de sintaxis que no obedecen a ninguna razón "lógica" y que debemos aprender de memoria sin preocuparnos de su sentido (uso de la "b" y la "v", cuando debemos de poner "h" o no ponerla), ocurre lo mismo con los lenguajes de programación.
Hay reglas de sintaxis que no obedecen a lógica alguna. Un saludo.
Muchas gracias por este video PildorasInformaticas, tengo una duda dices que al crear un metodo en una interfaz al implementarla en otra clase tirara error si ese metodo no se esta usando, con las constantes creadas en las interfaz es igual?? es decir si yo creo varias constantes ya con valores definidos si implemento esa interfaz me tiene que tirar error si no se estan usando? porque tengo una clase a la cual le estoy implementando una interfaz pero solo tiene constantes con valores pero si no las uso no me esta tirando ningun error
No. Si la interfaz solo tiene constantes no habrá error si no usas las constantes. Pero creo que nunca vi una interfaz que solo tuviera constantes. No consigo verle la utilidad. Un saludo!!
Pues la unica utilidad que le estoy es porque trabajo en la parte de automation testing y creo esas constantes en una interfaz con los nombre del Geckodriver, la direccion de la carpeta, y la url de la pagina en que hago el test, no se que digas si implementarlo de esa manera esta bien?
Creo que entiendo la teoría de las interfaces, pero podrías aclararme un poco mejor su utilidad práctica? Son unos patrones de diseño que les damos a las clases para que estas incluyan en su código los métodos o constantes que creamos convenientes, ok. Pero no son patrones muy poco concretos? Quiero decir, que en la interfaz damos el nombre del método, el número y tipo de parámetros que recibe y lo que devuelve, pero el funcionamiento va a depender totalmente de lo que programemos en la clase. No está sujeto a ningún algoritmo ni nada. Las únicas "pistas" que nos da la interfaz de cómo queremos que funcione el método son su nombre y los tipos de datos que maneja, no? No es algo demasiado inconcreto o es que yo no lo acabo de entender?
No se si he explicado mi duda de forma clara, si no contestas no te culparé xD. Un saludo!
Creo que te explicas. Hay dos formas de verlo: "poco concreto" lo cual sería una desventaja, o también "muy flexible" ya que permite implementar los métodos como desees, lo cual es una ventaja. Todo en Java tiene su función. Es muy posible que en un futuro hagas aplicaciones Java que no necesiten interfaces. Pero también es posible que colabores en proyectos grandes donde varios programadores vais a trabajar en el mismo programa y ahí si que empiezan a tener utilidad las interfaces. Un saludo!!
👌👌👌👌👍👍✔✔✔✔🦾🦾🤗🤗👀👀😎😎🍺🍺viernes 07 de octubre 2022 10:00 A.M.
Tengo 2 dudas, espero que alguien me las pueda resolver:
Cuando se hace un metodo abstracto, con la clase abstracta, se define el metodo sin argumentos ¿Esto siempre debe ser asi? que no deba recibir argumento.
Ya que la interfaz se hace el metodo abstracto recibiendo un argumento, y aqui me surge la segunda pregunta ¿Se puede decir que ese metodo abstracto de la interfaz que se creó, es como un setter y un getter al mismo tiempo?
Espero me puedan ayudar, y gracias por estos tipos de videos que han ayudado a muchisimas personas incluyendome :D
@Beto Diaz. En cuanto a la primera pregunta: no es obligatorio que los métodos abstractos deban o no recibir argumentos, es algo opcional o por lo menos cuando he hecho la prueba con un método abstracto que recibe argumentos, ni el IDE ni después la ejecución del programa me han devuelto error alguno.
En referencia a la segunda pregunta: repasando (muy por encima) los vídeos del curso, compruebo que en el vídeo correspondiente (vídeo 30, a partir del minuto 5:15) el principio que caracteriza a un "setter" es que se trata de un método "definidor" mientras que los "getters" son "captadores". En el caso que nos ocupa en este vídeo, este método (según mi precario entender) no parece definir nada sino más bien captar. De modo que yo diría que este es únicamente un método "getter".