CICLO II:
Programación
Básica en Java
Sesión 9:
Introducción a
Java
Programación Orientada a Objetos (POO)
Objetivos de la sesión
Al finalizar esta sesión estarás en capacidad de:
1. Definir y aplicar los conceptos relacionados con herencia en POO
2. Especificar los contextos donde se puede aplicar la herencia
3. Diseñar la herencia entre clases: definición de superclase y subclases
4. Explicar el uso del tipo de acceso protected y su aplicación en herencia
5. Construir programas en Java con la aplicación de los conceptos básicos de herencia
Herencia - Organización jerárquica
● Es un mecanismo para la reutilización de software.
¿Qué es? ● Permite crear una clase que es capaz de absorber los
atributos y métodos de una clase padre.
● Crea estructuras jerárquicas especializadas.
¿Por qué? ● Ahorra tiempo durante el desarrollo.
¿Para qué? • Extiende comportamientos a otros
objetos.
Herencia
(subclase y superclase)
En Java, es posible heredar atributos y métodos de una clase a otra.
Se agrupa el "concepto de herencia" en dos
categorías:
•Subclase (hijo):La clase que hereda de otra
clase.
•Superclase (padre): La clase que se hereda
de…
Para heredar de una clase, se usa la palabra
reservada extends.
Herencia (subclase y superclase)
En Java, es posible heredar atributos y métodos de una clase a otra.
Herencia - Organización jerárquica
● Permite reutilizar código creando nuevas clases a partir de las existentes
(construidas y depuradas)
● Compromete una relación de jerarquía
● Una nueva clase se generará agregando atributos y/o código a una clase existente
● Una clase (derivada) puede heredar de otra clase (base):
○ Atributos
○ Métodos
Herencia - Organización jerárquica
● Si una clase B hereda de otra clase A se tiene que:
○ B adopta la estructura (atributos) y comportamiento (métodos) de la clase A.
○ B puede:
■ Agregar nuevos atributos
■ Agregar nuevos métodos
■ Redefinir métodos
Herencia - Ejemplo:
Avión
-Alas
-Cabina
+ Despegar()
+ Aterrizar()
AvionGuerra AvionComercial AvionCarga
-TipoMisil -NumeroPasajeros -Peso
+ Disparar() +DarRefrigerio() + ValidarPeso()
Tipos de Herencia
Herencia Simple: Una clase puede Herencia Múltiple: Una clase puede
heredar de una única clase. heredar de varias clases. Cabe anotar
que en Java no se permite la herencia
múltiple.
A
B C B C
D E E
Herencia
Superclases y Subclases
● El proceso de herencia es transitivo:
A ○ B puede redefinir métodos
○ B hereda de A
▪ A es la superclase y B la subclase
B
○ C hereda de B y A
○ B y C son subclase de A
○ B es un descendiente directo de A
C
○ C es un descendiente indirecto de A
Herencia – Superclases y Subclases
Ejemplo
La superclase Vehículo representa a todos los vehículos, como taxis,
autobuses, barcos, bicicletas, camiones, etcétera.
Por el contrario, la subclase Auto representa a un subconjunto más pequeño
y específico de los vehículos.
Herencia – Superclases y Subclases
Ejemplo Vehículo
- matricula
Atributos
- modelo
comunes
- potencia
+ getMatricula()
+ getModelo() Métodos
+ getPotemcia() comunes
Taxi Autobus
Atributos
- numeroLicencia específicos - numeroCupos
+ setNumeroLicencia() Métodos + setNumeroCupos()
+ getNumeroLicencia() específicos + getNumeroCupos()
Herencia – Superclases y Subclases
Ejemplo de terminología
● Se define la clase Taxi a partir de la clase Vehículo y se tiene que:
• “Taxi" hereda las variables y métodos de "Vehiculo“.
• “Taxi" extiende de "Vehiculo“.
• “Taxi" es subclase de "Vehiculo“.
clase derivada.
clase hija.
• "Vehiculo" es superclase de “Taxi“.
clase base.
clase padre.
● La herencia realiza la relación es-un.
• Un Taxi es-un vehículo
• Un Autobus es-un vehiculo
Herencia – Superclases y Subclases
Sintaxis
La sintaxis para declarar subclases es:
public class SubClase extends SuperClase{
...
}
Modificador de acceso
Protected
La palabra clave protected es un modificador de acceso
utilizado para atributos, métodos y constructores,
haciéndolos accesibles en el mismo paquete y subclases.
public class Ejemplo3
{
protected static int atributo = 10; Protected: Las clases hijo
} pueden acceder a este atributo
import app.ejemplo3.Ejemplo3;
public class Ejemplo3_1 extends Ejemplo3
{
public static void main(String[] args)
{
[Link]([Link])
}
}
protected - EJEMPLO
class Persona {
protected String pnom = "Carolina";
protected String snom = "Sofia";
protected String email = "charag@[Link]";
protected int edad = 22;
}
class Estudiante extends Persona { La subclase Estudiante
private int agraduacion = 2020;
accede a la clase Persona
public static void main(String[] args) { con atributos protected
Estudiante myObj = new Estudiante();
[Link]("Nombre: " + [Link] + " " + [Link]);
[Link]("Email: " + [Link]);
[Link]("Edad: " + [Link]);
[Link]("Año de graduacion: " + [Link]);
}
}
Ejemplo: la clase Car (subclase) hereda los atributos y métodos de la Vehicleclase (superclase):
//la clase Car (subclase) hereda los atributos y métodos de la Vehicleclase (superclase)
class Herencia_Vehiculo {// superclase (padre)
protected String marca = "Ford"; // atributo clase Herencia_Vehiculo
public void bocina() { // metodo clase Herencia_Vehiculo
[Link]("Bocina en accion: Tuut, tuut!");
}
} ¿Notaste el modificador protected en Vehículo?
class Car extends Herencia_Vehiculo {// subclase (hijo) El atributo de marca en Herencia_Vehículo en
private String nomModelo = "Mustang"; // atributo clase Car un modificador de acceso protected .
public static void main(String[] args) { Si estuviera configurado en private, la clase myCar no
[Link]("\033[H\033[2J"); // limpia pantalla podría acceder a él.
// Creamos objeto myCar
Car myCar = new Car();
// Llamoal metod bocina() (de la clase Herencia_Vehiculo) en el objeto myCar
[Link]();
//Muestra el valor del atributo de marca (de la clase de vehículo)
//y el valor del nombre del modelo de la clase de Herencia_Vehiculo
[Link]("Atributo Clase Herencia_Vehiculo--> "+[Link]);
[Link]("Atributo Clase Car--> "+[Link]);
}
}
Ejemplo
La clase Alumno
contendrá solamente el
atributo curso, el
nombre y el nif son los
heredados de Persona
Clase Persona con los atributos nif y nombre.
//Clase Persona. La superclase Persona es la Clase Base
public class Persona {
private String nif;
private String nombre;
public String getNif() {
return nif;
}
public void setNif(String nif) {
[Link] = nif;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
[Link] = nombre;
}
}
Creamos la clase Alumno como derivada de la clase Persona. La clase Alumno
contendrá solamente el atributo curso, el nombre y el nif son los heredados de
Persona.
//Clase Alumno. Es la subclase. La clase Alumno hereda de la clase Persona
public class Alumno_H extends Persona{
private String curso;
public String getCurso() {
return curso;
}
public void setCurso(String curso) {
[Link] = curso;
}
}
La clase alumno hereda los atributos nombre y nif de la clase Persona y añade el
atributo propio curso. Por lo tanto:
Los atributos de la clase Alumno son nif, nombre y curso.
Los métodos de la clase Alumno son:
getNif(), setNif(String nif), getNombre(),
setNombre(String nombre), getCurso(),
setCurso(String curso).
La clase Alumno aunque hereda los
atributos nif y nombre, no puede acceder a
ellos de forma directa ya que son privados
a la clase Persona. Se acceden a través de
los métodos heredados de la superclase.
La clase Alumno puede utilizar los
componentes public y protected de la clase
Persona como si fueran propios.
public static void main(String[] ar) {
[Link]("\033[H\033[2J");
Alumno_H a = new Alumno_H();
Se utilizan los
[Link]("Charmen Aragon Mendoza"); métodos heredados de
la superclase Persona
[Link]("272813"); como propios
Se utiliza el
método propio [Link]("JAVA");
de la clase [Link]("Nombre: " + [Link]());
Alumno.
[Link]("Curso: " + [Link]());
}
}