{"id":2036,"date":"2023-11-28T08:55:19","date_gmt":"2023-11-28T11:55:19","guid":{"rendered":"https:\/\/stackcodelab.com\/blog\/?p=2036"},"modified":"2023-11-28T08:56:15","modified_gmt":"2023-11-28T11:56:15","slug":"capitulo-3-herencia-y-polimorfismo-interfaces-y-clases-abstractas","status":"publish","type":"post","link":"https:\/\/stackcodelab.com\/blog\/capitulo-3-herencia-y-polimorfismo-interfaces-y-clases-abstractas\/","title":{"rendered":"Cap\u00edtulo 3: Herencia y Polimorfismo, Interfaces y Clases Abstractas"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">En este cap\u00edtulo, profundizaremos en la programaci\u00f3n orientada a objetos (POO) en Java, centr\u00e1ndonos en los conceptos de herencia y polimorfismo, adem\u00e1s de explorar la importancia de las interfaces y clases abstractas. Estos conceptos son fundamentales para crear jerarqu\u00edas de clases y construir programas m\u00e1s flexibles y reutilizables.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a>3.1. Herencia y Polimorfismo<\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Herencia<\/strong>&nbsp;es un concepto clave en POO que permite que una clase herede atributos y m\u00e9todos de otra. Esto fomenta la reutilizaci\u00f3n de c\u00f3digo y la creaci\u00f3n de una jerarqu\u00eda de clases. Por otro lado, el&nbsp;<strong>polimorfismo<\/strong>&nbsp;permite que objetos de clases derivadas se comporten como objetos de la clase base.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejemplo 3.1.1: Herencia y Polimorfismo<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Animal {\r\n    void hacerSonido() {\r\n        System.out.println(\"El animal hace un sonido\");\r\n    }\r\n}\r\n\r\nclass Perro extends Animal {\r\n    void hacerSonido() {\r\n        System.out.println(\"El perro ladra\");\r\n    }\r\n}\r\n\r\npublic class ProgramaPrincipal {\r\n    public static void main(String&#91;] args) {\r\n        Animal miAnimal = new Perro(); \/\/ Polimorfismo\r\n        miAnimal.hacerSonido(); \/\/ Salida: El perro ladra\r\n    }\r\n}\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejercicio 3.1.1: Herencia y Polimorfismo<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Crea una clase llamada&nbsp;<code>Fruta<\/code>&nbsp;con un m\u00e9todo&nbsp;<code>obtenerColor()<\/code>. Luego, crea clases derivadas como&nbsp;<code>Manzana<\/code>&nbsp;y&nbsp;<code>Banana<\/code>&nbsp;que sobrescriban el m\u00e9todo&nbsp;<code>obtenerColor()<\/code>. Crea objetos de cada tipo de fruta y muestra sus colores en la consola.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a>3.2. Interfaces y Clases Abstractas<\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Interfaces<\/strong>&nbsp;y&nbsp;<strong>clases abstractas<\/strong>&nbsp;son herramientas importantes para la abstracci\u00f3n y el dise\u00f1o flexible. Las&nbsp;<strong>interfaces<\/strong>&nbsp;definen un conjunto de m\u00e9todos que una clase debe implementar, permitiendo que diferentes clases cumplan con un contrato com\u00fan. Las&nbsp;<strong>clases abstractas<\/strong>&nbsp;son clases parcialmente implementadas que pueden contener m\u00e9todos abstractos, y las clases concretas deben implementarlos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejemplo 3.2.1: Interfaces y Clases Abstractas<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>interface Forma {\r\n    double calcularArea();\r\n}\r\n\r\nclass Circulo implements Forma {\r\n    double radio;\r\n    \r\n    Circulo(double radio) {\r\n        this.radio = radio;\r\n    }\r\n    \r\n    public double calcularArea() {\r\n        return Math.PI * radio * radio;\r\n    }\r\n}\r\n\r\npublic class ProgramaPrincipal {\r\n    public static void main(String&#91;] args) {\r\n        Forma circulo = new Circulo(5.0);\r\n        System.out.println(\"\u00c1rea del c\u00edrculo: \" + circulo.calcularArea());\r\n    }\r\n}\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ejercicio 3.2.1: Interfaces y Clases Abstractas<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Crea una interfaz&nbsp;<code>Vehiculo<\/code>&nbsp;con m\u00e9todos&nbsp;<code>acelerar()<\/code>&nbsp;y&nbsp;<code>frenar()<\/code>. Luego, crea clases como&nbsp;<code>Coche<\/code>&nbsp;y&nbsp;<code>Moto<\/code>&nbsp;que implementen la interfaz&nbsp;<code>Vehiculo<\/code>&nbsp;y proporcionen sus propias implementaciones de acelerar y frenar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Resumen del Cap\u00edtulo y Ejercicios<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Resumen de los conceptos clave de este cap\u00edtulo, incluyendo herencia, polimorfismo, interfaces, clases abstractas y su importancia en la programaci\u00f3n orientada a objetos.<\/li>\n\n\n\n<li>Completa los ejercicios proporcionados para practicar y fortalecer tu comprensi\u00f3n de estos conceptos fundamentales de POO en Java.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><a>Respuesta ejercicio 3.2.1:<\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed tienes el c\u00f3digo y los pasos necesarios para resolver el ejercicio de crear una interfaz <code>Vehiculo<\/code> con m\u00e9todos <code>acelerar()<\/code>y <code>frenar<\/code>, y luego crear las clases <code>Coche <\/code>y <code>Moto <\/code>que implementen la interfaz y proporcionen sus propias implementaciones:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Paso 1: Creaci\u00f3n de la Interfaz\u00a0<\/strong><code><strong>Vehiculo<\/strong><\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Primero, crea la interfaz <code>Vehiculo <\/code>con los m\u00e9todos <code>acelerar()<\/code> y <code>frenar()<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>interface Vehiculo {\r\n    void acelerar(int velocidad);\r\n    void frenar();\r\n}\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Paso 2: Implementaci\u00f3n de la Clase&nbsp;<\/strong><code><strong>Coche<\/strong><\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n, crea la clase <code>Coche <\/code>que implementa la interfaz <code>Vehiculo<\/code> y proporciona sus propias implementaciones de <code>acelerar()<\/code> y <code>frenar()<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Coche implements Vehiculo {\r\n    private int velocidad;\r\n\r\n    @Override\r\n    public void acelerar(int velocidad) {\r\n        this.velocidad += velocidad;\r\n        System.out.println(\"El coche aceler\u00f3 a \" + this.velocidad + \" km\/h.\");\r\n    }\r\n\r\n    @Override\r\n    public void frenar() {\r\n        this.velocidad = 0;\r\n        System.out.println(\"El coche fren\u00f3 por completo.\");\r\n    }\r\n}\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Paso 3: Implementaci\u00f3n de la Clase&nbsp;<\/strong><code><strong>Moto<\/strong><\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora, crea la clase <code>Moto <\/code>que tambi\u00e9n implementa la interfaz <code>Vehiculo<\/code> y proporciona sus propias implementaciones de <code>acelerar()<\/code> y <code>frenar()<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Moto implements Vehiculo {\r\n    private int velocidad;\r\n\r\n    @Override\r\n    public void acelerar(int velocidad) {\r\n        this.velocidad += velocidad;\r\n        System.out.println(\"La moto aceler\u00f3 a \" + this.velocidad + \" km\/h.\");\r\n    }\r\n\r\n    @Override\r\n    public void frenar() {\r\n        this.velocidad = 0;\r\n        System.out.println(\"La moto fren\u00f3 por completo.\");\r\n    }\r\n}\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Paso 4: Uso de las Clases <\/strong><code><strong>Coche <\/strong><\/code><strong>y <\/strong><code><strong>Moto<\/strong><\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por \u00faltimo, puedes crear objetos de las clases <code>Coche <\/code>y <code>Moto <\/code>y llamar a sus m\u00e9todos para probar su funcionamiento:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class ProgramaPrincipal {\r\n    public static void main(String&#91;] args) {\r\n        Coche miCoche = new Coche();\r\n        Moto miMoto = new Moto();\r\n\r\n        miCoche.acelerar(60);\r\n        miMoto.acelerar(50);\r\n\r\n        miCoche.frenar();\r\n        miMoto.frenar();\r\n    }\r\n}\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Resultado Esperado:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>El coche aceler\u00f3 a 60 km\/h.\r\nLa moto aceler\u00f3 a 50 km\/h.\r\nEl coche fren\u00f3 por completo.\r\nLa moto fren\u00f3 por completo.\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Este ejercicio demuestra c\u00f3mo utilizar una interfaz en Java para definir un contrato com\u00fan (<code>Vehiculo<\/code>) y c\u00f3mo las clases concretas (<code>Coche <\/code>y <code>Moto<\/code>) implementan ese contrato proporcionando sus propias implementaciones de los m\u00e9todos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En este cap\u00edtulo, profundizaremos en la programaci\u00f3n orientada a objetos (POO) en Java, centr\u00e1ndonos en los conceptos de herencia y polimorfismo, adem\u00e1s de explorar la importancia de las interfaces y clases abstractas. Estos conceptos son fundamentales para crear jerarqu\u00edas de clases y construir programas m\u00e1s flexibles y reutilizables. 3.1. Herencia y Polimorfismo Herencia&nbsp;es un concepto [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2037,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[40],"tags":[],"class_list":["post-2036","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java-y-otras-hierbas"],"uagb_featured_image_src":{"full":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Herencia-y-Polimorfismo.jpg",1000,750,false],"thumbnail":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Herencia-y-Polimorfismo-150x150.jpg",150,150,true],"medium":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Herencia-y-Polimorfismo-300x225.jpg",300,225,true],"medium_large":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Herencia-y-Polimorfismo-768x576.jpg",768,576,true],"large":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Herencia-y-Polimorfismo.jpg",1000,750,false],"1536x1536":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Herencia-y-Polimorfismo.jpg",1000,750,false],"2048x2048":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/Herencia-y-Polimorfismo.jpg",1000,750,false]},"uagb_author_info":{"display_name":"arquitecto","author_link":"https:\/\/stackcodelab.com\/blog\/author\/arquitecto\/"},"uagb_comment_info":0,"uagb_excerpt":"En este cap\u00edtulo, profundizaremos en la programaci\u00f3n orientada a objetos (POO) en Java, centr\u00e1ndonos en los conceptos de herencia y polimorfismo, adem\u00e1s de explorar la importancia de las interfaces y clases abstractas. Estos conceptos son fundamentales para crear jerarqu\u00edas de clases y construir programas m\u00e1s flexibles y reutilizables. 3.1. Herencia y Polimorfismo Herencia&nbsp;es un concepto&hellip;","_links":{"self":[{"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/posts\/2036","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/comments?post=2036"}],"version-history":[{"count":1,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/posts\/2036\/revisions"}],"predecessor-version":[{"id":2038,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/posts\/2036\/revisions\/2038"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/media\/2037"}],"wp:attachment":[{"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/media?parent=2036"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/categories?post=2036"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/tags?post=2036"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}