Herencia En Java

Encuentra en el sitio

La herencia en la programación es nada mas y nada menos que usar los atributos y métodos que ya existen, en la POO se hace heredando de la clase que contengan los elementos necesarios para tal fin. La herencia en java (y en otros lenguajes) se declara con la palabra reservada extends seguidamente de la clase de la cual deseemos heredar. Esto se realiza con la finalidad de reutilizar código, como también es la base para el implementar el polimorfismo.

 

Lo primero que debemos de hacer es identificar la clase de la cual podamos usar la mayoría o su totalidad de código, para este caso usare el ejemplo anterior de una calculadora básica; para este caso se uso dos clases, una con los métodos necesarios para las operaciones y validación de números enteros, y otra clase donde se pedirán los datos y se mostraran los resultados. El principio de la herencia es usar métodos y atributos de la clase heredada como si fueran propios en la clase “heredera”, así que no habrá necesidad de crear objetos para manipular los métodos y atributos.

 

COMO USAR LA HERENCIA

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import javax.swing.JOptionPane;
 
/**
 * @author belial9826
 *
 * PRIMERA CLASE
 */
 
public class HerenciaJava extends funciones{//heredando de la clase funciones
 
    public void trin(){//metodo para el menu principal
        int op=0; //variable op para el control del menu principal            
 
        do{//comienzo del ciclo 
 
            op = Integer.parseInt(JOptionPane.showInputDialog(null, "1. Ingresar Numeros n 2. Sumar n 3. Restar "
                    + "n 4. Multiplicar n 5. Salir"));
            switch(op){
                case 1:{//opcion de ingresar numeros
                    if(n1==0 && n2==0){//si no hay numeros se invoca el metodo para ingresarlos
                        insNum();
                    }
                    else{//si ya hay valores en las variables
                        int y;
                        y = JOptionPane.showConfirmDialog(null, "Desea ingresar nuevos numeros?"
                                , "Ya existen numeros", JOptionPane.INFORMATION_MESSAGE);
                        if(y == JOptionPane.YES_OPTION){//si se decide ingresar nuevos valores se invoca el metodo
                            insNum();
                        }
                    }
                    break;
                }
                case 2:{//opcion para sumar
                    if(n1==0 && n2==0){//si no se han ingresado valores se muestra un mensaje
                       JOptionPane.showMessageDialog(null, "Debe de ingresar primero los numeros!!!");
                    }
                    else{
                        JOptionPane.showMessageDialog(null, n1+" + "+n2+" =  "+suma());//se invoca el metodo para sumar
                    }                        
                    break;
                }
                case 3:{
                    if(n1==0 && n2==0){//si no se han ingresado valores se muestra un mensaje
                       JOptionPane.showMessageDialog(null, "Debe de ingresar primero los numeros!!!");
                    }
                    else{
                        JOptionPane.showMessageDialog(null, n1+" - "+n2+" =  "+resta());//se invoca el metodo para restar
                    }                                     
                    break;
                }
                case 4:{
                    if(n1==0 && n2==0){//si no se han ingresado valores se muestra un mensaje
                       JOptionPane.showMessageDialog(null, "Debe de ingresar primero los numeros!!!");
                    }
                    else{
                        JOptionPane.showMessageDialog(null, n1+" * "+n2+" =  "+multiplicacion());//se invoca el metodo para multiplicar
                    }                        
                    break;
                }                    
            }
        }while(op!= 5);//el ciclo finaliza cuando se da cancelar o NO
 
    }
 
  public static void main (String[] args){ //metodo principal
 
      HerenciaJava ob = new HerenciaJava();//se crea el objeto para invocar el metodo del menu
      ob.trin();//se invoca el metodo para el menu
      System.exit(0);//linea para asegurar la finalizacion del programa    
 
    }  //fin metodo principal  
}//final de la clase
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import javax.swing.JOptionPane;
 
public class funciones {
 
    int n1, n2;
 
    public void insNum(){//funcion para ingresar los numeros de las operaciones
        n1 = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingrese el primer numero"));
        n2 = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingrese el segundo numero"));
    }
 
     public int suma(){//metodo para sumar, recibe dos numeros
        int op; //variable que almacena la respuesta
        op = n1 + n2; //operacion
        return op; //devuelve el valor de la operacion
    } //fin metodo suma
 
    public int resta (){ //metodo para restar, recibe dos numeros
        int op; //variable que almacena la respuesta
        op = n1 - n2; //operacion
        return op; //devuelve el valor de la operacion
    }// fin metodo resta
 
    public int multiplicacion(){ //metodo para multiplicar, recibe dos numeros
        int op; //variable que almacena la respuesta
        op = n1 * n2; //operacion
        return op; //devuelve el valor de la operacion
    } //fin metodo multiplicacion 
 
    public int division(){ //metodo para division, recibe dos numeros
        int op; //variable que almacena la respuesta
        op = n1 / n2; //operacion
        return op; //devuelve el valor de la operacion
    }//fin metodo division
 
    public boolean isNum(String n){//metodo para validar si se ha ingresado un numero, recibe una cadena de texto
        int a;//variable que almacena la cadena a convertir
        try{  
            a = Integer.parseInt(n); //se convierte la cadena      
            return true; //si se ha convertido a entero devuelve verdadero
        } 
        catch(NumberFormatException e){ 
            return false; //si no se ha convertido a entero devuelve falso
        }
    }//fin metodo validar
 
}

 

Como vemos en la clase HerenciaJava se ha declarado solo un método en el cual se muestra el menú, pero se puede apreciar el uso de las variables n1 y n2 sin haberlas declarado, pero recordemos que podemos hacer uso de las variables y métodos que usemos en la clase de la cual hemos heredado. En las lineas 38, 47 y 56 se puede apreciar la invocación de los métodos directamente al igual que las variables. Se que soy algo repetitivo con esto, pero una vez que tengamos claro como funciona la herencia podremos crear clases con métodos específicos y con esto reutilizar gran parte de código que necesitemos.

 

RECOMENDACIONES

Si intentamos invocar un método no estático en el método Main (linea 65 primer clase) nos arrojara un error, para solucionar este inconveniente debemos de hacer estático el método con la palabra reservada static para poder invocarlo directamente, este método estático no solo se podría invocar en el Main sino también en los demás métodos. Ademas de lo anterior no podremos heredar mas de una vez, para esto usamos polimorfismo, pero esto es tema para otro post 😉

 

Como se ve la implementación de herencia no es difícil, lo complicado es realizar una clase bien definida para poder usarla como base en las demás clases, así que no dudes en gastar mas tiempo en el análisis y formular los procesos y atributos necesarios para determinado fin.

Si te ha gustado el post, compártelo, regala un like ó comenta 😉

  1. Avatar for belial9826 xezuz dice:

    hola amigo soy estudiante de ing. en sistemas de 3°semestre y necesito ayuda para elaborar un compilador en java en netbeans y tienne condiciones para variables,constantes, operadores logicos ademas de palabras reservadas necesito ayida porfavor

    1. Avatar for belial9826 belial9826 dice:

      hola @xezuz, encontré en javaMexico lo necesario para la tarea que tienes, disculpa por no explicar como debe de ser, pero por cuestión de tiempo se me complica realizar un post en este momento sobre este tema. Espero te sirva, y si quieres comentar nuevamente o explicarnos tu experiencia con algún ejemplo lo pondré en un post respetando la autoria. Exitos.

Deja un comentario