Este documento presenta los conceptos fundamentales de la programación orientada a objetos en Java. Explica los conceptos de clases, objetos, atributos, métodos, herencia, encapsulamiento, wrappers y autoboxing/unboxing. También cubre temas como modificadores de acceso, clases abstractas e interfaces. El objetivo es que los estudiantes comprendan y apliquen eficientemente estos conceptos básicos de POO en el desarrollo de aplicaciones Java.
Este material didáctico fue desarrollado para la asignatura de Tópicos Avanzados de Programación, del plan SCD-1027 2016 de Ing. En Sistemas Computacionales
Este material didáctico fue desarrollado para la asignatura de Tópicos Avanzados de Programación, del plan SCD-1027 2016 de Ing. En Sistemas Computacionales
Gran compendio de los modelos de UML, que incluye todos los diagramas asociados , sus representaciones, componentes y ejemplos. Los diagramas de casos de uso, de clases, de distribución, de componentes, de colaboración , de objetos, de actividades , de secuencia, de estados y de colaboración son considerados en este gran compendio. Al finalizar la presentación se tendrá una idea general de los elementos fundamentales del diseño de sistemas empleando UML.
Esta presentación nos muestra los conceptos Fundamentales para el Diseño y Creación de Base de Datos Relacionales, se Centra en el Modelo de Datos Relacional, ya que es el mas usado a nivel mundial.
Esta presentación es parte del contenido del curso de Programación Avanzada impartido en la Universidad Rafael Landívar durante el año 2015.
Incluye los temas:
• POO - atributos y métodos
Creado por Ing. Alvaro Enrique Ruano
Gran compendio de los modelos de UML, que incluye todos los diagramas asociados , sus representaciones, componentes y ejemplos. Los diagramas de casos de uso, de clases, de distribución, de componentes, de colaboración , de objetos, de actividades , de secuencia, de estados y de colaboración son considerados en este gran compendio. Al finalizar la presentación se tendrá una idea general de los elementos fundamentales del diseño de sistemas empleando UML.
Esta presentación nos muestra los conceptos Fundamentales para el Diseño y Creación de Base de Datos Relacionales, se Centra en el Modelo de Datos Relacional, ya que es el mas usado a nivel mundial.
Esta presentación es parte del contenido del curso de Programación Avanzada impartido en la Universidad Rafael Landívar durante el año 2015.
Incluye los temas:
• POO - atributos y métodos
Creado por Ing. Alvaro Enrique Ruano
Conceptos básicos de programación orientada a objetos (poo)Maria Garcia
CONCEPTOS BÁSICOS DE PROGRAMACIÓN ORIENTADA A OBJETOS (POO)
Dentro del perfil de egresado en licenciatura en informática se encuentra que éste debe propiciar proyectos investigativos que contribuyan a la solución de problemas de la comunidad educativa, es ahí donde este módulo proporcionará a los estudiantes tener una visión más amplia en cuanto al tema tecnológico y le permitirán crear proyectos más enriquecedores
Trabajo de investigación
Si quieren informarse mas sobre la Programación Orientada a Objetos, visita mi blog aquí les dejo un link:
http://bloggerlisevelinvasquez.blogspot.pe/2017/04/programacion-orientada-objetos.html
Ipsos, empresa de investigación de mercados y opinión pública, divulgó su informe N°29 “Claves Ipsos” correspondiente al mes de abril, que encuestó a 800 personas con el fin de identificar las principales opiniones y comportamientos de las y los ciudadanos respecto de temas de interés para el país. En esta edición se abordó la a Carabineros de Chile, su evaluación, legitimidad en su actuar y el asesinato de tres funcionarios en Cañete. Además, se consultó sobre el Ejército y la opinión respecto de la marcha en Putre.
Diapositivas D.I.P.. sobre la importancia que tiene la interpol en HonduraspptxWalterOrdoez22
Es un conjunto de diapositivas creadas para la información sobre la importancia que tienen la interpol en honduras y los tratados entre ambas instituciones
2. Logro
Al finalizar la sesión es estudiante empleará
eficientemente los conceptos de POO y los asociará con
el desarrollo de aplicaciones Java con Netbeans.
3. Utilidad
• Conocer las bases del paradigma de desarrollo del software denominado
orientación a objetos en general como un metalenguaje de programación
• Utilizar como criterio de modularización la identificación de los objetos del
dominio de cualquier problema que requiera una solución de objetos
• Tener claro que cada módulo de la aplicación software corresponde a un
objeto existente en el dominio del problema y en él se incluyen todos los
aspectos (funcionalidad, estados, datos, etc.) que son propios del objeto.
• Determinar que cuando se aborda una aplicación utilizando el paradigma
orientado a objetos la pregunta clave es:
¿Qué objetos constituyen el sistema?
4. Transformación
4
Solución en el
computador
Problema del
mundo real
Resultados
del problema
Formulación
en objetos
Datos de salida
Solución en el
mundo real
Dominio del problema
Representación
abstracta del
problema
Interpretación
de los datos
salida
Dominio de modelado orientado a objetos
5. Ejemplo de aplicación del paradigma OO.
• Diseño de la aplicación de control de la puerta de un
garaje:
• La puerta se abre cuando desde un coche se pulsa un mando.
• El motor mueve la puerta para abrirla o cerrarla.
• Cuando han transcurrido 10 segundos sin eventos la puerta se
cierra.
• Si mientras que se está cerrando ocurre un evento de mando u
obstáculo se vuelve a abrir
• El sistema se apaga coherentemente con un interruptor.
5
7. Claves de las metodología orientadas a
objetos.
• Abstracción: Busca una definición conceptual común a muchos objetos, tratando de identificar
sus características esenciales y agrupándolos por clases.
• Encapsulación: define de forma independiente la abstracción o interfaz del módulo y su
implementación y estructura interna.
• Modularidad: Describe el sistema como conjunto de módulos(objetos) descentralizados y
débilmente acoplados.
• Herencia: Jerarquiza las clases de acuerdo con afinidades de sus abstracciones.
• Tipado: Clasifica los objetos de forma estricta, restringiendo las interacciones a solo aquellas
que son coherentes.
• Concurrencia: Enfatiza la naturaleza independiente de cada objeto, adjudicándole si procede
líneas de control de flujo independientes.
• Persistencia: Enfatiza la naturaleza independiente de los objetos, adjudicándole una existencia
que sobrepasa a quien lo creó.
7
8. Beneficios de la programación orientada a
objetos
• Descomponibilidad : Se consigue de forma natural al problema.
• Componibilidad y Reusabilidad: Los objetos son reales y se comparten con cualquier otra
aplicación del mismo dominio.
• Comprensibilidad y consistencia con el dominio del problema: La función y abstracción de un
objeto es obvia ya que coincide con la del objeto del dominio real que representa.
• Continuidad y estabilidad frente a cambios: La evolución de una aplicación es consecuencia de
cambios en los objetos que la componen, y solo afecta a un módulo.
• Robustez y protección frente a fallos: Cada objeto se implementa como un ente independiente y
los estados de excepción que se puedan generar, pueden ser tratados dentro del propio objeto.
• Soporte inherente de la concurrencia: La concurrencia propia de los dominios reales se transfiere
de forma natural a la aplicación.
• Escalabilidad: La complejidad de la aplicación crece linealmente con la complejidad del problema
que se aborda.
8
9. Ambitos de aplicación de la orientación a
objetos.
Los métodos orientados a objetos son aplicables a todas las fases de
desarrollo de una aplicación software.
• (OOA) Análisis orientado a objetos: Es un método de análisis que examina los
requerimientos desde el punto de vista de las clases y objetos encontrados en el vocabulario del
dominio (problema).
• (OOD) Diseño orientado a objetos: Es un método de diseñar un programa basado en
identificar los módulos de que se compone, mediante componentes que representan conjuntamente
los datos y las operaciones de una abstracción.
• (OOP) Programación orientada a objetos: Es una forma de expresar un programa
basada en construcciones léxicas que se denominan clases y que describen los datos y el
comportamiento común de conjuntos de objetos, que cada uno de ellos representa una instancia
independiente de la clase.
9
10. Clases y objetos
• Las clases son los módulos de diseño que describen el estado y el
comportamiento de algún tipo de elemento que constituyen la aplicación
(y en OO también algún elemento del problema).
• Una clase contiene;
• Los atributos que describen la información relativa al objeto que describe la
clase.
• Los métodos u operaciones que describen el comportamiento de los objetos
que describe la clase.
• Los objetos o instancias son los módulos de ejecución que constituyen un
escenario de análisis o el programa de la aplicación que se ejecuta en un
computador.
• Los objetos se instancian (construyen) a partir de una clase:
• La clase constituyen la plantilla que describe los tipos de datos y la
funcionalidad (comportamiento)de los objetos que son instancias suyas.
• Los objetos definen los valores concretos de la propiedades definidas en las
clases que se asignan a un elemento específico del problema o aplicación.
10
12. Atributos de una clase
• Son las variables que define la clase para contener la información que
requiere cada objetos descritos por ella para describir:
• El estado en que se encuentran como consecuencia de su evolución.
• Las propiedades de configuración cuando se crean.
• Cada atributo tienen definido el tipo de dato, esto es la información que
se le puede asignar. Los tipos pueden ser un tipo primitivo (Integer, Float,
Boolean, etc.) o la referencia a una clase.
• Se puede cualificar la visibilidad (quien puede leer o modificar el valor
asignado) de los atributos como públicos o privados:
• El valor de un atributos privado sólo puede ser accedido por los métodos del
propio objeto.
• El valor de los atributos públicos pueden ser también leídos por los métodos
de cualquier objetos que tenga la referencia al objeto.
• Un buen criterio es declarar los atributos de las clases como privados y
definir funciones de acceso si deben ser accedidos externamente. Cuando
la clase es sólo un tipo complejo de dato, suelen ser públicos.
12
13. Atributos estáticos
• Son variable que contienen información relativa a la clase, o a alguna
propiedad relativa al conjunto de las instancias de la clase.
• Para acceder a los atributos estáticos, hay que hacer referencia a la clase o
a cualquier instancia de la misma.
• En la representación UML, los atributos estáticos se representan
subrayados, los públicos con un prefijo + y los privados con un prefijo -.
13
14. Métodos (1)
• Son funciones y operaciones definidas con referencia a los objetos de una clase.
• Los métodos definidos en una clase definen su comportamiento:
• Proporcionan información deducible del estado de la instancia a la que se aplica.
• Produce cambios del estado de las instancia.
• Define operaciones básica, que sirven para construir otras mas complejas.
• Crear y construir nuevas instancias.
• Cuando se invoca un método puede retornar o no, un valor. Los valores retornados
tienen un tipo definido:
• Si el tipo retornado es un tipo primitivo, retorna un valor.
• Si el tipo retornado es una clase, retorna una referencia a un objeto de la clase.
• Los métodos pueden definir parámetros con tipo, a los que se asignan valores cuando
se invocan. Los valores de los parámetros son visibles en la implementación del
método.
• Si el tipo del parámetro es primitivo el valor se pasa por valor.
• Si el tipo de parámetro es una clase el valor se pasa por referencia.
• Los métodos pueden definirse con visibilidad privada o pública. Los métodos privados
sólo pueden ser invocados por métodos del mismo objeto.
14
15. Métodos (2)
• El conjunto de métodos públicos ofertados por una clase
constituyen la interfaz pública de los objetos de las clases
y definen su comportamiento como caja negra.
• Los cambios internos de una clase no afecta a las
aplicaciones que las usan, siempre que mantenga su
interfaz pública.
15
16. Métodos estáticos
• Son métodos que tienen acceso sólo a la información estática de la
clase y/o a la que recibe a través de los parámetros de invocación, y
no al estado propio de cualquier instancia de la clase.
• Pueden utilizarse para construir librerías de funciones que procesan
la información de los parámetros sin referencia a ningún objeto.
• En UML se representan subrayadas.
16
17. Herencia
• La herencia es el mecanismo por el que se especializan o extienden la
funcionalidad de una clase, diseñando a partir de ella nuevas clases.
• La clase A es una extensión de la clase B si es cierto que A es-un B,
• Cuando una clase extiende a otra, significa que hereda todo lo definido en ella
(atributos y métodos).
• La clase que resulta de la extensión puede añadir nuevos elementos (atributos y
métodos) a los heredados (Extensión), o modificar su comportamiento
(Refinamiento).
• Principales usos de la herencia:
• Herencia de implementación: La herencia como reutilización de código. Una clase
derivada puede heredar comportamiento de una clase base, por tanto, el código no
necesita volver a ser escrito para la derivada.
• Herencia de interfaz: La herencia como reutilización de conceptos: Esto ocurre cuando
una clase derivada sobrescribe el comportamiento definido por la clase base. Aunque
no se comparte ese código entre ambas clases, ambas comparten el prototipo del
método (comparten el concepto).
• La herencia puede ser Simple o Múltiple.
17
19. Clase abstracta e interface
• Una clase abstracta es la que representa la parte común
de la clases que se derivan de ellas, pero que no
representan ningún objeto existente.
• Una clase abstracta puede utilizarse como base de
herencia, pero no para instanciar objetos.
• Una interfaz definen una interfaz pública (conjunto de
métodos) sin especificar su implementación.
• Cuando una clase implementa una interfaz tiene que
incluir en su interfaz pública la declaración de todos los
métodos definidos en ella.
19
20. Organización del diseño
• El diseño de una aplicación puede requerir la definición de muchas
clases. Estas clases se organizan en contenedores que se denominan
paquetes.
• Algunos paquetes son desarrollados como parte del diseño, pero la
mayoría de los paquetes y de las clases son legados (previamente
diseñados) e importados en el proyecto de la aplicación.
20
21. Claves de la POO en JAVA
Magister Víctor Andrade Soto
22. Wrappers
Como sabe, Java usa tipos primitivos, como int o double, para
contener los tipos de datos básicos admitidos por el lenguaje.
Los tipos primitivos, en lugar de objetos, se utilizan para estas
cantidades por el bien del rendimiento. Usar objetos para
estos tipos básicos agregaría una sobrecarga inaceptable
incluso para los cálculos más simples. Por lo tanto, los tipos
primitivos no son parte de la jerarquía de objetos, y no
heredan de Object.
23. A pesar del beneficio de rendimiento que ofrecen los tipos
primitivos, hay momentos en los que necesitará una
representación de objetos. Por ejemplo, no puede pasar un
tipo primitivo por referencia a un método. Además, muchas
de las estructuras de datos estándar implementadas por Java
operan en objetos, lo que significa que no puede usar estas
estructuras de datos para almacenar tipos primitivos. Para
manejar estas situaciones (y otras), Java proporciona wrappers
de tipo, que son clases que encapsulan un tipo primitivo
dentro de un objeto. A continuación, analizaremos los
wrappers más de cerca.
24. Los envoltorios (wrapper) de tipo son Double, Float, Long, Integer,
Short, Byte, Character, y Boolean, que están empaquetados en
java.lang. Estas clases ofrecen una amplia gama de métodos que le
permiten integrar completamente los tipos primitivos en la jerarquía de
objetos de Java.
25. Wrappers de tipo numérico
Probablemente las envolturas de tipo más utilizadas son aquellas que
representan valores numéricos. Estos son Byte, Short, Integer, Long, Float y
Double. Todos los envoltorios de tipo numérico heredan de la clase abstracta
Number. Number declara métodos que devuelven el valor de un objeto en
cada uno de los diferentes tipos numéricos. Estos métodos se muestran aquí:
byte byteValue()
double doubleValue()
float floatValue()
int intValue()
long longValue()
short shortValue()
26. Por ejemplo, doubleValue() devuelve el valor de un objeto como un
double, floatValue() devuelve el valor como un float, y así
sucesivamente. Estos métodos son implementados por cada uno de los
envoltorios de tipo numérico.
Todas las envolturas de tipo numérico definen constructores que
permiten que un objeto se construya a partir de un valor dado, o una
representación de cadena de ese valor. Por ejemplo, aquí están los
constructores definidos para Integer y Double:
Integer(int num)
Integer(String str) throws NumberFormatException
Double(double num)
Double(String str) throws NumberFormatException
27. Uso de valueOf() en Wrapper
Si str no contiene un valor numérico válido, entonces se lanza un
NumberFormatException. Sin embargo, a partir de JDK 9, los
constructores wrapper de tipo han quedado obsoletos. Actualmente,
se recomienda que use uno de los métodos valueOf() para obtener un
objeto wrapper. El método [java]valueOf()[/java] es un miembro
estático de todas las clases wrappers y todas las clases numéricas
admiten formas que convierten un valor numérico o una cadena en un
objeto. Por ejemplo, aquí hay dos formas compatibles con Integer:
static Integer valueOf(int val)
static Integer valueOf(String valStr) throws NumberFormatException
34. En su soporte para la encapsulación, la clase proporciona los medios
por los que se puede controlar el acceso a los miembros.
Aunque el enfoque de Java es un poco más sofisticado, en esencia, hay
dos tipos básicos de miembros de la clase: público (public) y privado
(private). Se puede acceder libremente a un miembro público mediante
un código definido fuera de su clase. Se puede acceder a un miembro
privado solo por otros métodos definidos por su clase. Es a través del
uso de miembros privados que el acceso está controlado.
Restringir el acceso a los miembros de una clase es una parte
fundamental de la POO, ya que ayuda a evitar el mal uso de un objeto.
Al permitir el acceso a datos privados solo a través de un conjunto de
métodos bien definidos, puede evitar que se asignen valores
incorrectos a esos datos, por ejemplo, realizando una verificación de
rango.
35. • No es posible que el código fuera de la clase establezca el valor de un
miembro privado directamente.
• También puede controlar con precisión cómo y cuándo se utilizan los
datos dentro de un objeto.
Por lo tanto, cuando se implementa correctamente, una clase crea una
“caja negra” que se puede usar, pero cuyo funcionamiento interno no
está abierto a alteraciones. Hasta este punto, no ha tenido que
preocuparse por el control de acceso porque Java proporciona una
configuración de acceso predeterminada en la que, para los tipos de
programas mostrados anteriormente, los miembros de una clase están
disponibles libremente para el código en otro programa. (Por lo tanto,
para los ejemplos anteriores, la configuración de acceso default es
esencialmente public.)
36. Default
Cuando no se especifica ningún modificador de acceso para una clase,
método o miembro de datos, se dice estar teniendo modificador de
acceso default por defecto.
Los miembros de datos, clase o métodos que no se declaran utilizando
ningún modificador de acceso, es decir, que tengan un modificador de
acceso predeterminado, solo son accesibles dentro del mismo paquete.
En este ejemplo, crearemos dos paquetes y las clases en los paquetes
tendrán los modificadores de acceso predeterminados e intentaremos
acceder a una clase de un paquete desde otra clase del segundo
paquete.
38. Modificador de acceso Privado
El modificador de acceso privado se especifica con la palabra clave
[java]private[/java]. Los métodos o los miembros de datos declarados
como privados solo son accesibles dentro de la clase en la que se
declaran.
Cualquier otra clase del mismo paquete no podrá acceder a estos
miembros.
Las clases e interfaces no se pueden declarar como privadas (private).
En este ejemplo, crearemos dos clases A y B dentro del mismo paquete
p1. Declararemos un método en la clase A como privado e
intentaremos acceder a este método desde la clase B y veremos el
resultado.
40. Modificador de acceso protegido
(protected)
El modificador de acceso protegido se especifica con la palabra clave
[java]protected[/java].
Los métodos o miembros de datos declarados como
[java]protected[/java] son accesibles dentro del mismo paquete o sub-
clases en paquetes diferentes.
En este ejemplo, crearemos dos paquetes p1 y p2. La clase A en p1 es
public, para acceder a ella desde p2. El método que se muestra en la
clase A está protegido y la clase B se hereda de la clase A y, a
continuación, se accede a este método protegido creando un objeto de
clase B.
42. Modificador de acceso público (public)
El modificador de acceso público se especifica con la palabra clave
[java]public[/java].
El modificador de acceso público tiene el alcance más amplio entre
todos los demás modificadores de acceso.
Las clases, métodos o miembros de datos que se declaran como
públicos son accesibles desde cualquier lugar del programa. No hay
restricciones en el alcance de los miembros de datos públicos.
43. Modificadores que no son de acceso
En Java, tenemos 7 modificadores que no son de acceso o, a veces, también
llamados especificadores. Se usan con clases, métodos, variables,
constructores, etc. para proporcionar información sobre su comportamiento
a la JVM. Y son:
static
final
abstract
synchronized
transient
volatile
native
44. Herencia
La herencia es un pilar importante de OOP (Programación Orientada a
Objetos). Es el mecanismo en Java por el cual una clase permite
heredar las características (atributos y métodos) de otra clase. Aprenda
más a continuación.
En el lenguaje de Java, una clase que se hereda se
denomina superclase. La clase que hereda se llama subclase. Por lo
tanto, una subclase es una versión especializada de una superclase.
Hereda todas las variables y métodos definidos por la superclase y
agrega sus propios elementos únicos.
46. Terminología importante
Superclase: la clase cuyas características se heredan se conoce como
superclase (o una clase base o una clase principal).
Subclase: la clase que hereda la otra clase se conoce como subclase (o
una clase derivada, clase extendida o clase hija). La subclase puede
agregar sus propios campos y métodos además de los campos y
métodos de la superclase.
Reutilización: la herencia respalda el concepto de “reutilización”, es
decir, cuando queremos crear una clase nueva y ya hay una clase que
incluye parte del código que queremos, podemos derivar nuestra
nueva clase de la clase existente. Al hacer esto, estamos reutilizando
los campos/atributos y métodos de la clase existente.
48. Sobreescritura de Métodos en JAVA
En una jerarquía de clases, cuando un método de
una subclase tiene el mismo nombre y tipo que un método
de su superclase, se dice que el método de
la superclase sobrescribe el método de la superclase. Cuando
se llama a un método sobrescrito desde una subclase, ésta
siempre se refiere a la versión del método definida en la
subclase. La versión del método definido por la superclase
quedará oculta. Por ejemplo:
52. En programación orientada a objetos, polimorfismo es la capacidad que
tienen los objetos de una clase en ofrecer respuesta distinta e
independiente en función de los parámetros (diferentes
implementaciones) utilizados durante su invocación. Dicho de otro
modo el objeto como entidad puede contener valores de diferentes
tipos durante la ejecución del programa.
En JAVA el término polimorfismo también suele definirse como
‘Sobrecarga de parámetros’, que así de pronto no suena tan divertido
pero como veremos más adelante induce a cierta confusión. En
realidad suele confundirse con el tipo de poliformismo más común,
pero no es del todo exacto usar esta denominación.
53. Ejemplo de Polimorfismo
Un ejemplo clásico de poliformismo es el siguiente. Podemos crear dos
clases distintas: Gato y Perro, que heredan de la superclase Animal. La
clase Animal tiene el método abstracto makesound() que se
implementa de forma distinta en cada una de las subclases (gatos y
perros suenan de forma distinta). Entonces, un tercer objeto puede
enviar el mensaje de hacer sonido a un grupo de objetos Gato y Perro
por medio de una variable de referencia de clase Animal, haciendo así
un uso polimórfico de dichos objetos respecto del mensaje mover.
54. class Animal {
public void makeSound() {
System.out.println("Grr...");
}
}
class Cat extends Animal {
public void makeSound() {
System.out.println("Meow");
}
}
class Dog extends Animal {
public void makeSound() {
System.out.println("Woof");
}
}
55. Como todos los objetos Gato y Perro son objetos Animales, podemos
hacer lo siguiente
public static void main(String[ ] args) {
Animal a = new Dog();
Animal b = new Cat();
}
Creamos dos variables de referencia de tipo Animal y las apuntamos a
los objetos Gato y Perro. Ahora, podemos llamar a los métodos
makeSound().
57. Por lo general diremos que existen 3 tipos de polimorfismo:
Sobrecarga: El más conocido y se aplica cuando existen funciones con el
mismo nombre en clases que son completamente independientes una de la
otra.
Paramétrico: Existen funciones con el mismo nombre pero se usan diferentes
parámetros (nombre o tipo). Se selecciona el método dependiendo del tipo
de datos que se envíe.
Inclusión: Es cuando se puede llamar a un método sin tener que conocer su
tipo, así no se toma en cuenta los detalles de las clases especializadas,
utilizando una interfaz común.
En líneas generales en lo que se refiere a la POO, la idea fundamental es
proveer una funcionalidad predeterminada o común en la clase base y de las
clases derivadas se espera que provean una funcionalidad más específica.
61. InstanceOf
El operador instanceof sirve para conocer si un objeto es de un tipo
determinado. Por tipo, nos referimos a clase o interfaz (interface), es
decir, si el objeto pasaría el test «ES UN» para esa clase o ese interfaz,
especificado a la derecha del operador.
62. public class Vehiculos {
private String modelo;
private String color;
// metodos...
}
public class Coches extends Vehiculos{
private int puertas;
public static void main (String[] args){
Coches coche1 = new Coches();
if(coche1 instanceof Vehiculos){
System.out.println("coche1 es un coche y también un vehículo.");
}
}
// métodos...
}
63. Práctica: Desarrolle 1 aplicación con
formularios que utilice
• Herencia
• Polimorfismo
• Abstracción