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 |
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 } |
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.
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
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.