Sei sulla pagina 1di 13

Mtodo toString para clases en Java

El mtodo toString nos permite mostrar la informacin completa de un objeto, es


decir, el valor de susatributos.
Este mtodo tambin se hereda de java.lang.Object, por lo que deberemos
sobrescribir este mtodo. Esta es su definicin:
public String toString (){
String mensaje="El empleado se llama "+nombre+" "+apellido+"
con "+edad+" aos " +
"y un salario de "+salario;
return mensaje;
}

El mensaje puede ser como nosotros queramos.


Veamos un ejemplo practico:
public class EmpleadoApp {
public static void main(String[] args) {
//Creamos dos objetos distintos
Empleado empleado1=new Empleado("Fernando", "Urea", 23, 600);
Empleado empleado2=new Empleado("Antonio", "Lopez", 28, 900);
Empleado empleado3=new Empleado("Alvaro", "Perez", 19, 800);
//Mostramos la informacion del objeto
System.out.println(empleado1.toString());
System.out.println(empleado2.toString());
System.out.println(empleado3.toString());
}
}

Variable this en Java


La variable this se usa para diferenciar un atributo de una variable normal y corriente
dentro de una clase. Veamos un ejemplo de un trozo de una clase:
//Constructores
/**
* Constructor por defecto
*/
public Empleado(){
this.nombre="";
this.apellido="";
this.edad=0;

this.salario=0;
}
/**
* Constructor con 4 parametros
* @param nombre nombre del empleado
* @param apellido nombre del empleado
* @param edad edad del empleado
* @param salario salario del empleado
*/
public Empleado(String nombre, String apellido, int edad,
double salario){
this.nombre=nombre;
this.apellido=apellido;
this.edad=edad;
this.salario=salario;
}

Como vemos, los atributos deben diferenciarse de las variables que pasamos como
parmetros.
Tambin se usa para invocar mtodos de una propia clase dentro de esta. Otro uso
es invocar otro constructor pasandole como parmetro, los parmetros del propio
constructor. Veamos un ejemplo, de este ultimo uso:
//Constructores
/**
* Constructor por defecto
*/
public Empleado(){
this ("", "", 0, 0);
}
/**
* Constructor con 4 parametros
* @param nombre nombre del empleado
* @param apellido nombre del empleado
* @param edad edad del empleado
* @param salario salario del empleado
*/
public Empleado(String nombre, String apellido, int edad, double
salario){
this.nombre=nombre;
this.apellido=apellido;
this.edad=edad;
this.salario=salario;
}

Como vemos, es como si llamramos al constructor que tiene esos parmetros con
esos tipos de datos.
**
* Clase Empleado
*
* Contiene informacion de cada empleado
*

* @author Fernando
* @version 1.0
*/
public class Empleado {
//Atributos
/**
* Nombre del empleado
*/
private String nombre;
/**
* Apellido del empleado
*/
private String apellido;
/**
* Edad del empleado
*/
private int edad;
/**
* Salario del empleado
*/
private double salario;
//Metodos publicos
/**
* Devuelve el nombre del empleado
* @return nombre del empleado
*/
public String getNombre() {
return nombre;
}
/**
* Modifica el nombre de un empleado
* @param nombre
*/
public void setNombre(String nombre) {
this.nombre = nombre;
}
/**
* Devuelve la edad de un empleado
* @return edad del empleado
*/
public int getEdad() {
return edad;
}
/**
* Modifica la edad de un empleado
* @param edad
*/
public void setEdad(int edad) {
this.edad = edad;
}

/**
* Devuelve el salario de un empleado
* @return salario del empleado
*/
public double getSalario() {
return salario;
}
/**
* Suma un plus al salario del empleado si el empleado tiene mas
de 40 aos
* @param sueldoPlus
* @return <ul>
*
<li>true: se suma el plus al sueldo</li>
*
<li>false: no se suma el plus al sueldo</li>
*
</ul>
*/
public boolean plus (double sueldoPlus){
boolean aumento=false;
if (edad>40 && compruebaNombre()){
salario+=sueldoPlus;
aumento=true;
}
return aumento;
}
//Metodos privados
private boolean compruebaNombre(){
if(nombre.equals("")){
return false;
}
return true;
}
//Constructor
/**
* Constructor por defecto
*/
public Empleado(){
this.nombre="";
this.apellido="";
this.edad=0;
this.salario=0;
}
/**
* Constructor con 4 parametros
* @param nombre nombre del empleado
* @param apellido nombre del empleado
* @param edad edad del empleado
* @param salario salario del empleado
*/
public Empleado(String nombre, String apellido, int edad, double
salario){
this.nombre=nombre;
this.apellido=apellido;

this.edad=edad;
this.salario=salario;
}
}

Clase ejecutable
public class EmpleadoApp {
public static void main(String[] args) {
Empleado empleado1=new Empleado ("Fernando", "Urea", 23, 800);
Empleado empleado2=new Empleado ("", "Lopez", 50 ,1800);
//Mostramos el valor actual del salario del empleado1
System.out.println("El salario del empleado1 es
"+empleado1.getSalario());
//Modificamos la edad del empleado1
empleado1.setEdad(43);
empleado1.plus(100);
//Mostramos el salario de nuevo, ahora tendra 100 mas
System.out.println("El salario actual del empleado1 es
"+empleado1.getSalario());
//Modificamos el nombre del empleado2
empleado2.setNombre("Antonio");
empleado2.plus(100);
//Mostramos el salario de nuevo, ahora tendra 100 mas
System.out.println("El salario del empleado2 es
"+empleado2.getSalario());
}
}

Herencia Java
/**
* Clase Empleado
*
* Contiene informacion de cada empleado
*
* @author Fernando
* @version 1.0
*/
public class Empleado {

//Atributos
/**
* Nombre del empleado
*/
protected String nombre;
/**
* Apellido del empleado
*/
protected String apellido;
/**
* Edad del empleado
*/
protected int edad;
/**
* Salario del empleado
*/
protected double salario;
//Metodos publicos
/**
* Devuelve el nombre del empleado
* @return nombre del empleado
*/
public String getNombre() {
return nombre;
}
/**
* Modifica el nombre de un empleado
* @param nombre
*/
public void setNombre(String nombre) {
this.nombre = nombre;
}
/**
* Devuelve la edad de un empleado
* @return edad del empleado
*/
public int getEdad() {
return edad;
}
/**
* Modifica la edad de un empleado
* @param edad
*/
public void setEdad(int edad) {
this.edad = edad;
}
/**
* Devuelve el salario de un empleado
* @return salario del empleado
*/

public double getSalario() {


return salario;
}
/**
* Suma un plus al salario del empleado si el empleado tiene mas
de 40 aos
* @param sueldoPlus
* @return <ul>
*
<li>true: se suma el plus al sueldo</li>
*
<li>false: no se suma el plus al sueldo</li>
*
</ul>
*/
public boolean plus (double sueldoPlus){
boolean aumento=false;
if (edad>40 && compruebaNombre()){
salario+=sueldoPlus;
aumento=true;
}
return aumento;
}
//Metodos privados
/**
* Comprueba que el nombre no este vacio
* @return <ul>
*
<li>true: el nombre es una cadena vacia</li>
*
<li>false: el nombre no es una cadena vacia</li>
*
</ul>
*/
private boolean compruebaNombre(){
if(nombre.equals("")){
return false;
}
return true;
}
//Constructores
/**
* Constructor por defecto
*/
public Empleado(){
this ("", "", 0, 0);
}
/**
* Constructor con 4 parametros
* @param nombre nombre del empleado
* @param apellido nombre del empleado
* @param edad edad del empleado
* @param salario salario del empleado
*/
public Empleado(String nombre, String apellido, int edad, double
salario){
this.nombre=nombre;
this.apellido=apellido;
this.edad=edad;

this.salario=salario;
}
}

Clase hija Comercial:


/**
* Clase Comercial
*
* Contiene informacin de un comercial, un tipo de empleado
*
* @author Fernando
* @version 1.0
*/
public class Comercial extends Empleado{
//Atributos, aunque no indiquemos nada es como si tuviera los
atributos del padre
/**
* Comision por venta del comercial
*/
private double comision;
/**
* Constructor por defecto
*/
public Comercial(){
this.comision=0;
}
/**
* Constructor con 5 parametros
* @param nombre nombre del comercial
* @param apellido apellido del comercial
* @param edad edad del comercial
* @param salario salario del comercial
* @param comision comision del comercial
*/
public Comercial(String nombre, String apellido, int edad, double
salario, double comision) {
super(nombre, apellido, edad, salario);
this.comision=comision;
}
}

Clase hija Repartidor


/**
* Clase Repartidor
*
* Contiene informacin de un repartidor, un tipo de empleado
*
* @author Fernando
* @version 1.0
*/

public class Repartidor extends Empleado{


//Atributos, aunque no indiquemos nada es como si tuviera los
atributos del padre
/**
* Zona del repartidor
*/
private String zona;
/**
* Constructor por defecto
*/
public Repartidor(){
this.zona="";
}
/**
* Constructor con 5 parametros
* @param nombre nombre del repartidor
* @param apellido apellido del repartidor
* @param edad edad del repartidor
* @param salario salario del repartidor
* @param zona zona del repartidor
*/
public Repartidor(String nombre, String apellido, int edad, double
salario, String zona) {
super(nombre, apellido, edad, salario);
this.zona=zona;
}
}

Vayamos por partes, en la clase padre, vemos que los atributos en lugar
de private usamos protected, haciendo que los atributos se hereden a las clases
hijas.
En las clases hijas, vemos que despus del nombre de la clase escribimos extends
nombre_clase_padre, tambin tienen sus propios atributos.
Debemos tener en cuenta varios aspectos, los constructores de la clase hija siempre
llaman al constructor por defecto (el que no tiene parmetros) de la clase padre,
tambin podemos indicar que constructor debe de llamar, se indica
con super(parametros);, despus podemos hacer lo queramos. Si no indicamos nada
es como si escribiramos super();.
Tambin debemos tener en cuenta que los mtodos no es necesario que los
heredemos, ya que conpublic las clases hijas podrn acceder a los mtodos de la
clase padre.
Tambin podemos llamar mtodos de la clase padre
consuper.nombre_mtodo(parmetros) podemos usarlo para que llame a un mtodo

que necesitamos para un mtodo de la clase hija. Nos ahorrara trabajo, es mejor que
copiar y pegar cdigo.
Ahora vamos a ver un ejemplo de crear objetos de estas clases heredadas:
public class EmpleadoApp {
public static void main(String[] args) {
//Creamos objetos de las clases hijas
Comercial comercial1=new Comercial("Antonio", "Lopez", 24, 600,
50);
Repartidor repartidor1=new Repartidor("Fernando", "Urea", 43,
400, "Este");
//Invocamos los metodos de la clase padre
comercial1.plus(300);
repartidor1.plus(300);
//Mostramos los atributos, usando los metodos get de la clase
padre
System.out.println("El salario actual del comercial es
"+comercial1.getSalario());
System.out.println("El salario actual del repartidor es
"+repartidor1.getSalario());
}
}

CLASS FIGURA GEOMETRICA:


package FigurasGeometricas;
public abstract class FiguraGeometrica {
protected double valor1;
public FiguraGeometrica(double valor1) {
super();
this.valor1 = valor1;
}
public double getValor1() {
return valor1;
}
public void setValor1(double valor1) {
this.valor1 = valor1;
}
public abstract double getArea();
public abstract double getPerimetro();
}

CLASS CIRCULO:

public class Circulo extends FiguraGeometrica {


public Circulo(double valor1) {
super(valor1);
}
@Override
public double getArea() {
return Math.PI*Math.pow(this.valor1, 2);
}
@Override
public double getPerimetro() {
return Math.PI*this.valor1;
}
}

.
public class Cuadrado extends FiguraGeometrica {
public Cuadrado(double valor1) {
super(valor1);
}
@Override
public double getArea() {
return Math.pow(this.valor1, 2);
}
@Override
public double getPerimetro() {
return this.valor1*4;
}
}

..
public class Rectangulo extends FiguraGeometrica {
protected double valor2;
public Rectangulo(double valor1, double valor2) {
super(valor1);
this.valor2 = valor2;
}
public double getValor2() {
return valor2;
}
public void setValor2(double valor2) {
this.valor2 = valor2;
}
@Override
public double getArea() {
return this.valor1*this.valor2;
}

@Override
public double getPerimetro() {
return 2*this.valor1 + 2*this.valor2;
}
}

public class Triangulo extends FiguraGeometrica {


private double valor2;
public Triangulo(double valor1, double valor2) {
super(valor1);
this.valor2 = valor2;
}
public double getValor2() {
return valor2;
}
public void setValor2(double valor2) {
this.valor2 = valor2;
}
@Override
public double getArea() {
return (this.valor1*this.valor2)/2;
}
@Override
public double getPerimetro() {
return this.valor1 + (2 * Math.sqrt((Math.pow(this.valor1,
2)+Math.pow(this.valor2, 2))));
}
}

.
public class Cubo extends Cuadrado {
public Cubo(double valor1) {
super(valor1);
}
public double getArea() {
return Math.pow(this.valor1, 3);
}

public class Principal {


public static void main(String[] args) {
FiguraGeometrica figura;
figura = new Circulo(5);
System.out.println(figura.getClass());
System.out.println("Area: "+figura.getArea());
System.out.println("Perimetro: "+figura.getPerimetro());

figura = new Cuadrado(5);


System.out.println(figura.getClass());
System.out.println("Area: "+figura.getArea());
System.out.println("Perimetro: "+figura.getPerimetro());
figura = new Rectangulo(5,2);
System.out.println(figura.getClass());
System.out.println("Area: "+figura.getArea());
System.out.println("Perimetro: "+figura.getPerimetro());
figura = new Triangulo(5,2);
System.out.println(figura.getClass());
System.out.println("Area: "+figura.getArea());
System.out.println("Perimetro: "+figura.getPerimetro());
figura = new Cubo(5);
System.out.println(figura.getClass());
System.out.println("Area: "+figura.getArea());
System.out.println("Perimetro: "+figura.getPerimetro());

}
}

Potrebbero piacerti anche