Está en la página 1de 26

Programación

orientada a objetos

LICENCIATURA EN SISTEMAS

FCAD - UNER
Unidad 5
Herencia y Polimorfismo.
Herencia.
Fundamentos de la herencia.
Superclases: acceso a miembros.
Referencia a la superclase: super.
super.
Creación de una jerarquía multinivel.
Sobrescritura de métodos.
Selección de métodos en forma dinámica.
Utilización de final con la herencia.
Control de acceso.
Clases abstractas.
La clase Object
Object..
Uso de instanceof.
instanceof.
Interfaces.
Definición de interfaces.
Implementación de una interfaz.
Implementación parcial.
Utilización de las interfaces.
Herencia en interfaces.

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia.

Selección de métodos en forma dinámica

Es el mecanismo a través del cual la llamada a un método sobreescrito se


resuelve en tiempo de ejecución, en lugar de en tiempo de compilación.

Es importante ya que es como Java implementa el polimorfismo en


tiempo de ejecucion

public class A3 {
void llamarme() {
System.out.println("Método llamarme dentro de A3");
}
}

public class B3 extends A3{


void llamarme() {
System.out.println("Método llamarme en B3");
}
}

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia. Selección de métodos en forma dinámica

public class C3 extends A3 {


void llamarme() {
System.out.println("Método
llamarme en C3");
}
}

public class MetodoDinamico {


public static void main(String args[]) {
A3 a = new A3(); // objeto tipo A3
B3 b = new B3(); // objeto tipo B3
C3 c = new C3(); // objeto tipo C3
A3 r; // obtiene una referencia de tipo A3
r = a; // r se refiere a un objeto de tipo A3
r.llamarme(); // llamada a método llamarme de A3
r = b; // r refiere a objeto de tipo B3
r.llamarme(); // llama a método llamarme de la version B3
r = c; // r refiere al objeto C
r.llamarme(); // llama a método llamarme de la version C3
}
}

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5
Herencia y Polimorfismo.
Herencia.
Fundamentos de la herencia.
Superclases: acceso a miembros.
Referencia a la superclase: super.
super.
Creación de una jerarquía multinivel.
Sobrescritura de métodos.
Selección de métodos en forma dinámica.
Utilización de final con la herencia.
Control de acceso.
Clases abstractas.
La clase Object
Object..
Uso de InstanceOf.
InstanceOf.
Interfaces.
Definición de interfaces.
Implementación de una interfaz.
Implementación parcial.
Utilización de las interfaces.
Herencia en interfaces.

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia.

Utilización de final con la herencia

Un método declarado como final en una clase, no puede ser


sobreescrito en una clase derivada.

Ligamiento estático o dinámico?

Una clase declarada final no puede tener clases derivadas.


derivadas. Esto se puede
hacer por motivos de seguridad y también por motivos de eficiencia
eficiencia,,
porque cuando el compilador sabe que los métodos no van a ser redefinidos
puede hacer optimizaciones adicionales
adicionales..

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5
Herencia y Polimorfismo.
Herencia.
Fundamentos de la herencia.
Superclases: acceso a miembros.
Referencia a la superclase: super.
super.
Creación de una jerarquía multinivel.
Sobrescritura de métodos.
Selección de métodos en forma dinámica.
Utilización de final con la herencia.
Control de acceso.
Clases abstractas.
La clase Object
Object..
Uso de InstanceOf.
InstanceOf.
Interfaces.
Definición de interfaces.
Implementación de una interfaz.
Implementación parcial.
Utilización de las interfaces.
Herencia en interfaces.

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia.

Control de Acceso

De acuerdo a la forma en que se especifica un atributo,


objetos de otras clases tienen distintas posibilidades de
accederlos:

Acceso desde: private protected public (por defecto)


la propia clase S S S S
subclase en el mismo paquete N S S S
otras clases en el mismo paquete N S S S
subclases en otros paquetes N S S N
otras clases en otros paquetes N N S N
S: puede acceder
N: no puede acceder

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia.

Private
El nivel de acceso más restringido es private.

Un miembro privado es accesible sólo para la clase en la que está definido. Se utiliza este acceso para
declarar miembros que sólo deben ser utilizados por la clase. Esto incluye las variables que contienen
información que si se accede a ella desde el exterior podría colocar al objeto en un estado de
inconsistencia, o los métodos que llamados desde el exterior pueden poner en peligro el estado del
objeto o del programa donde se está ejecutando.

Los miembros privados son como secretos, nunca deben contársele a nadie.

Para declarar un miembro privado se utiliza la palabra clave private en su declaración.

class Alpha { class Beta {


private int soyPrivado; void metodoAccesor() {
private void metodoPrivado() { Alpha a = new Alpha();
System.out.println("metodoPrivado"); a.soyPrivado = 10; // ilegal
} a.metodoPrivado(); // ilegal }
} }

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia.

Protected
Protected permite a la propia clase, las subclases, y todas las clases dentro del mismo paquete que
accedan a los miembros. Este nivel de acceso se utiliza cuando es apropiado para una subclase de la clase
tener acceso a los miembros, pero no las clases no relacionadas.

Los miembros protegidos son como secretos familiares - no importa que toda la familia lo sepa, incluso
algunos amigos allegados pero no se quiere que los extraños lo sepan.

Para declarar un miembro protegido, se utiliza la palabra clave protected.


package Griego; package Griego;

class Alpha { class Gamma {


protected int estoyProtegido; void metodoAccesor() {
protected void metodoProtegido() { Alpha a = new Alpha();
System.out.println("metodoProtegido"); a.estoyProtegido = 10; // legal
} a.metodoProtegido(); // legal
} }
}
package Latin;
import Griego.*;
class Delta extends Alpha {
void metodoAccesor(Alpha a, Delta d) {
a.estoyProtegido = 10; // ilegal
d.estoyProtegido = 10; // legal
a.metodoProtegido(); // ilegal
d.metodoProtegido(); // legal
}
}
Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2015
Unidad 5 Herencia.

Public
El especificador de acceso más sencillo es public. Todas las clases, en todos los paquetes tienen acceso a
los miembros públicos de la clase. Los miembros públicos se declaran sólo si su acceso no produce
resultados indeseados si un extraño los utiliza.

Aquí no hay secretos familiares; no importa que lo sepa todo el mundo.

Para declarar un miembro público se utiliza la palabra clave public.

package Griego;
class Alpha {
public int soyPublico;
public void metodoPublico() {
System.out.println("metodoPublico");
}
}

package Romano;

import Griego.*;

class Beta {
void metodoAccesor() {
Alpha a = new Alpha();
a.soyPublico = 10; // legal
a.metodoPublico(); // legal
}
}
Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2015
Unidad 5 Herencia.

Acceso de Paquete
Se obtiene si no se especifica ningún otro nivel de acceso a los miembros.
Este nivel de acceso permite que las clases del mismo paquete que la clase tengan acceso a los miembros.
Este nivel de acceso asume que las clases del mismo paquete son amigas de confianza.

Este nivel de confianza es como la que extiende a sus mejores amigos y que incluso no la tiene con su
familia.

package Griego;
class Alpha {
int estoyEmpaquetado;
void metodoEmpaquetado() {
System.out.println("metodoEmpaquetado");
}
}

package Griego;
class Beta {
void metodoAccesor() {
Alpha a = new Alpha();
a.estoyEmpaquetado = 10; // legal
a.metodoEmpaquetado(); // legal
}
}

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia. Control de Acceso

Subclases y la privacidad de métodos


Java especifica que los métodos no pueden ser sobrescritos para ser mas
privados, esto quiere decir que cuando heredamos y realizamos una sobrecarga
o una sobrescritura, el acceso nunca puede ser mas restrictivo. Cualquier
métodos que sea sobrescrito con un acceso mas restrictivo producirá un error
de compilación.

Un método puede ser sobreescrito por un método con un acceso diferente


siguiendo algunas reglas
reglas:

- Un método privado puede ser sobrescrito por un método privado, por


defecto, protegido o público.

- Un método por defecto puede ser sobreescrito por un método por defecto,
protegido o público.

- Un método protegido puede ser sobrescrito por un método protegido o


público.

- Un método público solo puede ser sobreescrito por un método público.


Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018
Unidad 5
Herencia y Polimorfismo.
Herencia.
Fundamentos de la herencia.
Superclases: acceso a miembros.
Referencia a la superclase: super.
super.
Creación de una jerarquía multinivel.
Sobrescritura de métodos.
Selección de métodos en forma dinámica.
Utilización de final con la herencia.
Control de acceso.
Clases abstractas.
La clase Object
Object..
Uso de InstanceOf.
InstanceOf.
Interfaces.
Definición de interfaces.
Implementación de una interfaz.
Implementación parcial.
Utilización de las interfaces.
Herencia en interfaces.

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia.
Clases Abstractas
Es una clase de la que no se pueden crear objetos.
objetos.

Su utilidad es permitir que otras clases deriven de ella, proporcionándoles un


marco o modelo que deben seguir y algunos métodos de utilidad general.
general.

Animal

Felino Hipopotamo Canino

Leon Tigre Lobo Perro

Gato

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia.

Clases Abstractas

Una clase abstract puede tener métodos declarados como abstract abstract,, en
cuyo caso no se da definición del método.
método. Si una clase tiene algún método
abstract es obligatorio que la clase sea abstract
abstract.. En cualquier sub
sub--clase
este método deberá bien ser redefinido, bien volver a declararse como
abstract (el método y la sub
sub--clase
clase)).

Una clase abstract puede tener métodos que no son abstract


abstract.. Aunque no
se puedan crear objetos de esta clase, sus sub
sub--clases heredarán el método
completamente a punto para ser utilizado
utilizado..

Como los métodos static no pueden ser redefinidos, un método abstract


no puede ser static
static..

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia. Clases Abstractas

abstract class Animal {


String nombre;
int patas;

public Animal(String n, int p) {


nombre=n;
patas=p;
}

abstract void habla();


// método abstracto que debe ser redefinido por las
subclases
}

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia. Clases abstractas.

class Perro extends Animal {


// La clase perro es una subclase de la clase
abstracta Animal
String raza;
public Perro(String n, int p, String r) {
super(n,p);
raza=r;
}

public void habla() {


// Este método es necesario redefinirlo para
poder instanciar
// objetos de la clase Perro
System.out.println("Me llamo "+nombre+": GUAU,
GUAU");
System.out.println("mi raza es "+raza);
}
}

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia. Clases abstractas.
class Gallo extends Animal {
// La clase Gallo es una subclase de la clase abstracta Animal
public Gallo(String n, int p) {
super(n,p);
}
public void habla() {
// Este método es necesario redefinirlo para poder instanciar
objetos de la clase Gallo
System.out.println("Soy un Gallo, Me llamo "+nombre);
System.out.println("Kikirikiiii");
}
}
class Abstracta {
public static void main(String argumentos[]) {
Perro toby = new Perro("Toby",4,"San Bernardo");
Gallo kiko = new Gallo("Kiko",2);
kiko.habla();
System.out.println();
toby.habla();
}
}

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia. Clases abstractas.
public abstract class /** Retorna relleno. */
ObjetoGeometrico { public boolean getFilled() {
private String color = return relleno;
"blanco"; }
private boolean relleno;
private java.util.Date /** Set un nuevo relleno */
fechaCreacion; public void setRelleno(boolean
relleno) {
/** Constructor por defecto*/ this.relleno = relleno;
protected ObjetoGeometrico() }
{
fechaCreacion = new /** Get fechaCreacion */
java.util.Date(); public java.util.Date
} getFechaCreacion() {
return fechaCreacion;
/** Retorna color */ }
public String getColor() {
return color; /** Retorna un string representando el
} objeto */
public String toString() {
/** Set un nuevo color */ return "Creado el " +
public void setColor(String fechaCreacion + "\ncolor: " + color +
color) { " y relleno: " + relleno;
this.color = color; }
}
/** Método abstracto getArea */
public abstract double getArea();

/** Método abstracto getPerimetro */


public abstract double getPerimetro();
}

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia. Clases abstractas.

Tips
Un método abstracto no puede estar contenido en una clase no abstracta.

Si una subclase de una super clase abstracta no implementa todos los


métodos abstractos, la subclase debe ser declarada abstracta.

Una clase abstracta no puede ser instanciada utilizando el operador new,


pero sí pueden definirse sus constructores, los cuales son invocados en los
constructores de su superclase.

Una clase que contiene métodos abstractos debe ser abstracta. Sin embargo,
es posible declarar una clase abstracta que no tiene métodos abstractos.

Una subclase puede ser abstracta, aún cuando su super clase es concreta. Por
ejemplo, la clase Object es concreta, pero sus subclases pueden no serlo.

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia. Clases abstractas.

Tips
Una subclase puede sobreescribir un método de su superclase para
declararlo como abstracto (inusual).

No puede crearse una instancia de una clase abstacta utilizando el operador


new, pero una clase abstracta puede ser utilizada como un tipo de datos.

ObjetoGeometrico [] objetos = new ObjetoGeometrico[10];

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia. La clase Object
Object..

Object
Una subclase puede sobreescribir un método de su superclase para
declararlo como abstracto (inusual).

No puede crearse una instancia de una clase abstacta utilizando el operador


new, pero una clase abstracta puede ser utilizada como un tipo de datos.

ObjetoGeometrico [] objetos = new ObjetoGeometrico[10];

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia. La clase Object
Object..

Object

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia. Uso de instanceof.
instanceof.

instanceof
Conocer la clase de la instancia

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5

Bibliografía complementaria

Herbert Schildt. Java: Manual de Referencia – Séptima Edición. McGrawHill,


2007.

Harvey Deitel y Paul Deitel. Como programar en Java - Octava Edición.


Prentice-Hall, 2009

Bruce Eckel. Thinking in Java - Cuarta Edición. Prentice Hall, 2006.

Holzner Steven. La Biblia de Java 2. Anaya Multimedia, 2005

Y. Daniel Liang. Introduction to Java Programming, Comprehensive Version –


Séptima Edición. Prentice Hall, 2008

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018

También podría gustarte