LABORATORIO PROGRAMACIÓN JAVA SESIÓN 5-1: POO BÁSICO EN JAVA

Documentos relacionados
Java Interfaces y el concepto de simplicidad

Práctica No. 5. Estructuras con Memoria Dinámica

Herencia Java y Servicios Web I Master en Ingeniería Matemática

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Práctica 5c. Práctica 5c. José M. Ordax

FUNDAMENTOS DE PROGRAMACIÓN - Septiembre 2010

Estructuras de control selectivas

Práctica 10a. Práctica 10a. José M. Ordax

Manejo de archivos de acceso directo en Java.

Soluciones Ejercicios Tema 1

Uso de Java Generics (I)

Clases abstractas e interfaces en Java

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

Diseño de tipos Igualdad, representación, código, copia y relación de orden

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

Tema 7.- Fundamentos de la Programación Orientada a Objetos

PROGRAMACIÓN ORIENTADA A OBJETOS 1/7/2009. Examen de Java. Nombre: DNI: Titulación:

Ejercicio 3 Proyecto Intérprete Curso de Spring Framework

Java en 2 horas. Rodrigo Santamaría

INTERFACE ITERATOR DEL API JAVA. MÉTODO REMOVE PARA BORRAR OBJETOS EN COLECCIONES. EJERCICIOS Y EJEMPLO RESUELTO. (CU00919C)

Examen. Programación II

Conceptos básicos de Orientación a Objetos, manejo con Eclipse.

Aplicaciones de Escritorio

Concurso: Cuánto sabes de JAVA?

Soluciones Ejercicios Tema 3

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

Guía práctica de estudio 07: Herencia

Polimorfismo Java y Servicios Web I Master en Ingeniería Matemática

HERENCIA (2ª parte) En Java todas las clases derivan de otra, aunque no se diga explícitamente.

Java Herencia vs Interfaces

Swing 03 Introducción al Uso de Botones

Java 8 FlatMap y Streams

// Método Comunicarse, sera implementado por las clases concretas que hereden de la clase //animal

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

Implementar rehashing en TablaHash. Soluciones Ejercicios Tema 13. Implementar toarray en TablaHash. Radares de Tráfico (I)

Herencia. Hay clases que comparten gran parte de sus características.

Ingeniería del Software Separación entre Presentación y Lógica del Negocio

INICIACIÓN A LA PROGRAMACIÓN LENGUAJE JAVA con BlueJ

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

Introducción a la Programación en Java

PRIMER EXAMEN PARCIAL. 5 de febrero de SOLUCIONES

Vamos a mostrar el código fuente de la clase Persona y el del Servlet que imprime una lista de personas :

EJEMPLO EJERCICIO RESUELTO CON POLIMORFISMO, SOBREESCRITURA DE MÉTODOS Y HERENCIA JAVA. CÓDIGO (CU00691B)

Práctica 11f. Práctica 11f. José M. Ordax

INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C)

Instituto Tecnológico de Zacatecas. Departamento de Sistemas y Computación. Licenciatura en Informática. Organización de Datos

FACULTAD DE ECONOMIA Y ADMINISTRACION DEPARTAMENTO DE CIENCIAS DE LA COMPUTACION CÁTEDRA PROGRAMACION GENERAL. Trabajo Práctico Nº 4

Tema 3 Herencia en Java Parte 2. Programación Orientada a Objetos Curso 2015/2016

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

Programación Orientada a Objetos en Java

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

INTERFACE LIST. CLASE LINKEDLIST DEL API JAVA. EJERCICIO RESUELTO Y DIFERENCIAS ENTRE ARRAYLIST Y LINKEDLIST (CU00921C)

Curso de Java orientado a Android Parte 2

Tema 6 Patrones de Diseño. Programación Orientada a Objetos Curso 2010/2011

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

Tema 1. Herencia y Polimorfismo

Práctica 11e. Práctica 11e. José M. Ordax

Entiendo los métodos de Java equals y hashcode

Clases en Java. Declaración

Formato para prácticas de laboratorio

Depto. Ingeniería de Sistemas Telemáticos Universidad Politécnica de Madrid ETSI Telecomunicación Fundamentos de Programación 15 de diciembre de 2011

PRÁCTICA 4: DISEÑO DE TIPOS Versión: 1.0.1

El concepto Java Reflection y como utilizarlo

CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos

Introducción a Java. Introducción a Java. Programación I

12. Tipos de atributos

LA CLASE VECTOR DEL API JAVA. MÉTODOS TRIMTOSIZE Y ENSURECAPACITY EJEMPLO Y EJERCICIOS RESUELTOS. (CU00922C)

INSTITUTO TECNOLOGICO DE VILLAHERMOSA

Utilizando un JPA Stream con JPA 2.2

Java interface y extensibilidad

EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFAZ CLONEABLE DE JAVA. MÉTODO CLONE() PARA CLONAR OBJETOS. (CU00912C)

Examen de Métodos de Programación Ingeniería Informática Primera Parte

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

USO DE LOS OBJETOS JLABEL, JTEXTFIELD Y JBUTTON

Programación orientada a objetos

Programación Orientada a Objetos (Grado en Ingeniería Informática y Grado en Ingeniería en Tecnologías de la Información - UNED)

PARTE TEÓRICA - TEST [2,5 PUNTOS]:

Curso de Java POO: Programación orientada a objetos

EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFACE ITERABLE DEL API DE JAVA Y MÉTODO ITERATOR. RECORRER COLECCIONES DE OBJETOS (CU00915C)

Implementación del nivel de datos usando db4o

Clases en Java. Declaración de clases en Java 02/09/16. Ing. Roberto Martínez Román - public class Alumno { private int matricula;

Tema 3 Herencia en Java Parte 2. Programación Orientada a Objetos Curso 2015/2016

Examen de Prácticas de Programación Ingeniería Informática

Derechos de Acceso: COMPOSICION

Transcripción:

LABORATORIO PROGRAMACIÓN JAVA SESIÓN 5-1: POO BÁSICO EN JAVA En esta sesión realizaremos programas orientados a objetos básicos utilizando el lenguaje Java. Se pretende enseñar cómo realizar aplicaciones OO utilizando varias clases. 1. POO CON JAVA A continuación realizaremos unos ejemplos de utilización de las distintas técnicas de POO que nos proporciona Java. Con estos ejemplos aprenderemos la utilización de las interfaces, la herencia y las clases con métodos estáticos. 1. Ejemplo de definición y utilización de una interface: interface Trabajo double pagarsueldo(double horas); public class Empresa1 implements Trabajo //Esta empresa paga a 12 euros la hora de trabajo public double pagarsueldo(double horas) return horas*12; public class Empresa2 implements Trabajo //Esta empresa paga a 15 euros la hora de trabajo public double pagarsueldo(double horas) return horas*15; 2. Construir una interface en Java que contenga los siguientes métodos: interface ModuloCalculo double suma(double a, double b); double resta(double a, double b); double multiplica(double a, double b); double divide(double a, double b); 1

3. Construir una clase en Java que implemente la interface anterior: public class ModuloCalculoImpl implements ModuloCalculo public double suma(double a, double b) return a+b; public double resta(double a, double b) return a-b; public double multiplica(double a, double b) return a*b; public double divide(double a, double b) return a/b; 4. Construir una clase en Java que haga uso de la clase anterior y que sume 2+3, y multiplique el resultado por 8: public class PruebaMCI public static void main (String args[]) ModuloCalculoImpl mci = new ModuloCalculoImpl(); System.out.println( mci.multiplica(mci.suma(2, 3), 8) ); 5. Crear una nueva clase a partir de la clase ModuloCalculoImpl que tenga la operación módulo (%). public class ModuloCalculoImpl2 extends ModuloCalculoImpl public double modulo(double a, double b) return a % b; 6. Construir una clase en Java que haga uso de la clase anterior y que sume 2+3, y calcule el módulo de la división por 3: public class PruebaMCI2 public static void main (String args[]) ModuloCalculoImpl2 mci2 = new ModuloCalculoImpl2(); System.out.println( mci2.modulo(mci2.suma(2, 3), 3) ); 2

7. Construir una clase en Java que contenga métodos estáticos: public class Operaciones public static double suma(double a, double b) return a+b; public static double resta(double a, double b) return a-b; public static double multiplica(double a, double b) return a*b; public static double divide(double a, double b) return a/b; public static double modulo(double a, double b) return a % b; 8. Construir una clase en Java que haga uso de la clase anterior y que sume 2+3, y multiplique el resultado por 8: public class PruebaOperaciones public static void main (String args[]) System.out.println( Operaciones.multiplica(Operaciones.suma(2, 3), 8) ); 3

2. Ejemplo POO Coche A continuación realizaremos un programa orientado a objetos para la instanciación y manejo de objetos de tipo coche. Lo primero que haremos será crear un proyecto en NetBeans donde crearemos las clases. Para ello, en NetBeans pulsamos en el icono de nuevo proyecto y seleccionamos la categoría General y dentro Java Application. Rellenamos con la información mostrada a continuación: Una vez creado el proyecto pulsamos en el icono de nuevo fichero y seleccionamos la categoría Java Classes y dentro Java Class, incluyendo todas las clases que creemos dentro del paquete vehiculos : 4

En primer lugar se crean los atributos: marca, modelo, matrícula y velocidad; los tres primeros de tipo String y el último int. Para ello situamos el cursor sobre la zona de código y seleccionamos Insert Code y en el menú desplegable que aparece seleccionamos Add Property. En el cuadro de diálogo que se muestra se indica el tipo de acceso, el tipo de atributo, el nombre del atributo (también se puede indicar si se quiere inicializar); incluso se pueden generar los getter y los setter. 5

De la misma forma se procedería para los otros tres atributos: marca, modelo y velocidad. Obteniendo al final: 6

Los métodos get y set ya han sido creados según se iban creando los atributos. En caso de no haberlos implementado a la vez que los atributos se podría hacer de la siguiente forma: pulsamos con el botón derecho del ratón en Coche y seleccionamos Refactor y Encapsulate Fields, después pulsamos Refactor : El último paso que queda es crear el constructor, para ello situamos el cursor sobre la zona de código y seleccionamos Insert Code (como para los Atributos) y en el menú desplegable que aparece seleccionamos Constructor. En el cuadro de diálogo se marcan los atributos que vayan a ser utilizados: 7

El código final de la clase es el siguiente: - Clase Coche: package vehiculos; public class Coche /** Creates a new instance of Coche */ public Coche(String matricula, String marca, String modelo, int velocidad) this.matricula = matricula; this.marca = marca; this.modelo = modelo; this.velocidad = velocidad; //Atributos private String matricula; private String marca; private String modelo; private int velocidad; //Métodos public String getmatricula() return matricula; public void setmatricula(string matricula) this.matricula = matricula; public String getmarca() return marca; public void setmarca(string marca) this.marca = marca; 8

public String getmodelo() return modelo; public void setmodelo(string modelo) this.modelo = modelo; public int getvelocidad() return velocidad; public void setvelocidad(int velocidad) this.velocidad = velocidad; Para probar la clase Coche crearemos una clase con un método main, para hacerlo, pulsamos en el icono de nuevo fichero ( New File ) y seleccionamos la categoría Java y dentro Java Main Class : 9

- Clase PruebaCoches: package vehiculos; public class PruebaCoches /** Creates a new instance of PruebaCoches */ public PruebaCoches() /** * @param args the command line arguments */ public static void main(string[] args) // TODO code application logic here Coche c1 = new Coche("1234 BCD", "Opel", "Astra", 0); Coche c2 = new Coche("2345 CDE", "BMW", "S1", 80); Coche c3 = new Coche("3456 DEF", "Audi", "A3", 100); c1.setvelocidad(60); System.out.println("velocidad: " + c1.getvelocidad()); Ahora solo nos falta ejecutarlo para crear los objetos c1, c2 y c3, además de probar a llamar al método setvelocidad. Extenderlo con más objetos y con más llamadas a métodos. 3. Ejercicio Banco 1 Se pretende realizar una pequeña aplicación en Java para la gestión de las cuentas de un banco. La aplicación se compondrá de una clase Cuenta para representar las cuentas y PruebaCuentas para instanciar y gestionar diversos objetos de tipo cuenta. La clase Cuenta debe contar como mínimo con los atributos: número de cuenta (String), titular (String), saldo (double) y fecha de apertura (Calendar). Extraer los métodos get y set correspondientes y añadirle los métodos retirar e ingresar dinero. 10

4. Ejemplo POO Empleados El siguiente ejemplo de POO consiste en la creación de una serie de clases que nos permiten gestionar los empleados de una empresa. Crearemos una librería de Java que luego podremos utilizar en diversos proyectos. Para ello en NetBeans pulsamos en el icono de nuevo proyecto y seleccionamos la categoría General y dentro Java Class Library : 11

Una vez creado el proyecto crearemos las distintas clases que formarán la librería que serán: Persona, Empleado y Departamento. Para crear estas clases pulsamos el icono de nuevo fichero y seleccionamos la categoría Java Classes y dentro Java Class, incluyendo todas las clases dentro del paquete empleados : El código de las tres clases es el siguiente: - Clase Persona: package empleados; public class Persona //Atributos private String DNI; private String nombre; protected int edad; protected String estado; //Constructor public Persona(String p_dni, String p_nombre, int p_edad, String p_estado) DNI = p_dni; nombre = p_nombre; edad = p_edad; estado = p_estado; //Métodos public String getdni() return DNI; public String getnombre() return nombre; public int getedad() return edad; public void cumpleaños() edad += 1; public String getestado() return estado; public void setestado(string nuevo) estado = nuevo; 12

// Devuelve información textual de una persona public String tostring() return DNI + " " + nombre; - Clase Empleado: package empleados; public class Empleado extends Persona //Atributos private String categoria; private double sueldo; private Departamento dept; //Constructor public Empleado(String p_dni, String p_nombre, int p_edad, String p_estado, String categoria, double sueldo, Departamento dept) super(p_dni, p_nombre, p_edad, p_estado); //constructor clase padre this.categoria = categoria; this.sueldo = sueldo; this.dept = dept; //Métodos public String getcategoria() return categoria; public void setcategoria(string nueva) categoria = nueva; public double getsueldo() return sueldo; public Departamento getdepartamento() return dept; public void setdepartamento(departamento otrodept) dept = otrodept; public void subesueldo(double cantidad) sueldo += cantidad; public void subesueldo(int porcentaje) sueldo += (sueldo * porcentaje/100); //Redefine el método cumpleaños public void cumpleaños() edad += 1; if (edad >65) estado = "JUBILADO"; //Imprime los datos del empleado public String tostring() return "Empleado: " + super.tostring() + " - Categoría: " + categoria + " - Sueldo: " + sueldo + " # Departamento: " + dept.tostring(); 13

- Clase Departamento: package empleados; import java.util.vector; public class Departamento //Atributos private String id; private String nombre; private String localizacion; private Vector empleadosdept; //Constructor public Departamento( String p_id, String p_nombre, String p_loc ) id = p_id; nombre = p_nombre; localizacion = p_loc; empleadosdept = new Vector(); //Métodos public String getiddept() return this.id; public String getnombredept() return this.nombre; public void setnombredept(string nombredept) this.nombre = nombredept; public String getlocalizaciondept() return this.localizacion; public void setlocalizaciondept(string localizaciondept) this.localizacion = localizaciondept; public Vector getempleadosdept() return this.empleadosdept; // Inserta un nuevo empleado en el departamento. Si lo inserta devuelve true public boolean setempleadodept(empleado emp) if (!empleadosdept.contains(emp)) this.empleadosdept.add(emp); return true; else return false; // Borra un empleado del departamento. Si lo borra devuelve true public boolean borraempleadodept(empleado emp) if (empleadosdept.contains(emp)) this.empleadosdept.remove(emp); return true; else return false; 14

// Imprime los datos del Departamento public String tostring() return getiddept() + " - " + getnombredept() + " - " + getlocalizaciondept(); Para probar la librería vamos a realizar un segundo proyecto llamado PruebaEmpleados de tipo Java Application dentro de la categoría General : Una vez creado accedemos a las propiedades del proyecto e incluimos la librería pulsando en AddProject y seleccionando el proyecto Empleados: 15

Rellenamos la clase Main como sigue: package pruebaempleados; import empleados.*; public class Main public static void main(string[] args) // TODO code application logic here //Creamos dos empleados Departamento dep1 = new Departamento("1","Prensa", "Madrid"); Empleado emp1 = new Empleado("153647458S","Pepe",65,"casado","Jefe",1500,dep1); Empleado emp2 = new Empleado("452697419Z","Maria",25,"soltera","Redactora",1000,dep1); //Aplicamos métodos System.out.println("Empleado 1: " + emp1.tostring()); System.out.println("Empleado 2: " + emp2.tostring()); emp1.cumpleaños(); emp1.subesueldo(100.0); System.out.println("Nombre: " + emp1.getnombre() + " Estado: " + emp1.getestado() + " Sueldo: " + emp1.getsueldo()); emp2.subesueldo(10); System.out.println("Nombre: " + emp2.getnombre() + " Sueldo: " + emp2.getsueldo()); 5. Ejercicio Banco 2 Se pretende modificar la aplicación de la gestión de las cuentas del banco de forma que se tenga una relación de asociación entre las cuentas y los clientes del banco. Para realizarlo tendremos que crear una clase Cliente que represente los clientes del banco. La clase Cliente debe contar como mínimo con los atributos: DNI (String), nombre (String), dirección (String) y fecha de nacimiento (Calendar) con sus métodos get y set correspondientes. Las clases deben representar la relación de asociación entre cuentas y clientes con la inclusión del atributo cuentas de tipo ArrayList en la clase Cliente y el atributo titulares de tipo ArrayList en la clase Cuenta. Se deben proporcionar los métodos necesarios para insertar y borrar clientes y cuentas. 16

6. Solución Ejercicio 1 Se pretende realizar una pequeña aplicación en Java para la gestión de las cuentas de un banco. La aplicación se compondrá de una clase Cuenta para representar las cuentas y PruebaCuentas para instanciar y gestionar diversos objetos de tipo cuenta. La clase Cuenta debe contar como mínimo con los atributos: número de cuenta (String), titular (String), saldo (double) y fecha de apertura (Calendar). Extraer los métodos get y set correspondientes y añadirle los métodos retirar e ingresar dinero. - Clase Cuenta: package banco; import java.util.calendar; public class Cuenta /** Creates a new instance of Cuenta */ public Cuenta(String numero, String titular, double saldo) this.numero = numero; this.titular = titular; this.saldo = saldo; this.fechaapertura = Calendar.getInstance(); private String numero; private String titular; private double saldo; private Calendar fechaapertura; public String getnumero() return numero; public String gettitular() return titular; public void settitular(string titular) this.titular = titular; public double getsaldo() return saldo; public void setsaldo(double saldo) this.saldo = saldo; public Calendar getfechaapertura() return fechaapertura; public void setfechaapertura(calendar fechaapertura) this.fechaapertura = fechaapertura; public void ingresar(double cantidad) this.saldo += cantidad; 17

public void retirar(double cantidad) this.saldo -= cantidad; public String tostring() return "Cuenta: " + this.numero + " - " + this.titular + " - " + this.saldo; - Clase PruebaCuentas: package banco; public class PruebaCuentas public static void main(string[] args) // TODO code application logic here Cuenta c1 = new Cuenta("1","Pepe",100); Cuenta c2 = new Cuenta("2","Maria",200); c1.ingresar(200); c2.retirar(100); System.out.println(c1.toString()); System.out.println(c2.toString()); 7. Solución Ejercicio 2 Se pretende modificar la aplicación de la gestión de las cuentas del banco de forma que se tenga una relación de asociación entre las cuentas y los clientes del banco. Para realizarlo tendremos que crear una clase Cliente que represente los clientes del banco. La clase Cliente debe contar como mínimo con los atributos: DNI (String), nombre (String), dirección (String) y fecha de nacimiento (Calendar) con sus métodos get y set correspondientes. Las clases deben representar la relación de asociación entre cuentas y clientes con la inclusión del atributo cuentas de tipo ArrayList en la clase Cliente y el atributo titulares de tipo ArrayList en la clase Cuenta. Se deben proporcionar los métodos necesarios para insertar y borrar clientes y cuentas. - Clase Cuenta2: package banco; import java.util.calendar; import java.util.arraylist; public class Cuenta2 /** Creates a new instance of Cuenta2 */ public Cuenta2(String numero, Cliente2 c, double saldo) this.numero = numero; this.settitularcuenta(c); this.saldo = saldo; this.fechaapertura = Calendar.getInstance(); 18

private String numero; private ArrayList<Cliente2> titulares = new ArrayList<Cliente2>(); private double saldo; private Calendar fechaapertura; public String getnumero() return numero; public ArrayList<Cliente2> gettitulares() return titulares; public void settitulares(arraylist<cliente2> titulares) this.titulares = titulares; public double getsaldo() return saldo; public void setsaldo(double saldo) this.saldo = saldo; public Calendar getfechaapertura() return fechaapertura; public void setfechaapertura(calendar fechaapertura) this.fechaapertura = fechaapertura; public void ingresar(double cantidad) this.saldo += cantidad; public void retirar(double cantidad) this.saldo -= cantidad; // Inserta un nuevo titular en la cuenta. Si lo inserta devuelve true public boolean settitularcuenta(cliente2 c) if (!titulares.contains(c)) this.gettitulares().add(c); c.setcuentatitular(this); //insertamos la cuenta en el titular return true; else return false; // Borra un titular de la cuenta. Si lo borra devuelve true public boolean borratitularcuenta(cliente2 c) if (!titulares.contains(c)) this.gettitulares().remove(c); c.borracuentatitular(this); //borramos la cuenta del titular return true; else return false; 19

public String tostring() return "Cuenta: " + this.numero + " - " + this.gettitulares().tostring() + " - " + this.saldo; - Clase Cliente2: package banco; import java.util.calendar; import java.util.arraylist; public class Cliente2 /** Creates a new instance of Cliente2 */ public Cliente2(String DNI, String nombre, String direccion, Calendar fecnac) this.dni = DNI; this.nombre = nombre; this.direccion = direccion; this.fecnac = fecnac; private String DNI; private String nombre; private String direccion; private Calendar fecnac; private ArrayList<Cuenta2> cuentas = new ArrayList<Cuenta2>(); public String getdni() return DNI; public void setdni(string DNI) this.dni = DNI; public String getnombre() return nombre; public void setnombre(string nombre) this.nombre = nombre; public String getdireccion() return direccion; public void setdireccion(string direccion) this.direccion = direccion; public Calendar getfecnac() return fecnac; public void setfecnac(calendar fecnac) this.fecnac = fecnac; public ArrayList<Cuenta2> getcuentas() return cuentas; 20

public void setcuentas(arraylist<cuenta2> cuentas) this.cuentas = cuentas; // Inserta una nueva cuenta. Si la inserta devuelve true public boolean setcuentatitular(cuenta2 c) if (!cuentas.contains(c)) this.getcuentas().add(c); return true; else return false; // Borra una cuenta. Si la borra devuelve true public boolean borracuentatitular(cuenta2 c) if (!cuentas.contains(c)) this.getcuentas().remove(c); return true; else return false; public String tostring() return "Cliente: " + this.dni + " - " + this.nombre + " - " + this.direccion; - Clase PruebaCuentas2: package banco; import java.util.calendar; public class PruebaCuentas2 public static void main(string[] args) // TODO code application logic here Calendar f1 = Calendar.getInstance(); f1.set(1980,1,1); Calendar f2 = Calendar.getInstance(); f1.set(1982,2,2); Cliente2 t1 = new Cliente2("1","Pepe","dir1",f1); Cliente2 t2 = new Cliente2("2","Maria","dir2",f2); Cuenta2 c1 = new Cuenta2("1",t1,100); Cuenta2 c2 = new Cuenta2("2",t2,200); c1.ingresar(200); c2.retirar(100); System.out.println(c1.toString()); System.out.println(c2.toString()); 21