Programación General > Java
Problema al Heredar clases
Boxcarpilot:
ENUNCIADO DEL PROBLEMA
Las clases Cuadrado? Círculo y Triángulo tienen que calcular su área y perímetro. Por lo tanto tiene sentido crear una clase genérica llamada Figura. Elabore una aplicación que haga lo antes señalado. Imprima el perímetro y el área de cada figura
Pues ya lo tengo casi listo (exceptuando impresiones), pero no puedo imprimir mientras no pueda retornar variables al programa principal....
Pues asi lo tengo hasta ahora
--- Código: Java ---import javax.swing.JOptionPane; //clase madreclass Figura { private float side1,side2,rad,ladob,ladoc,ladod,altura; void atrapando(float a, float b, float c, float tri1, float tri2, float tri3, float tri4) { // los lados del cuadrado side1=a; side2=b; //radio del circulo rad=c; //los elementos del triangulo altura=tri1; ladob=tri2; ladod=tri3; ladoc=tri4; } //Cuadrado class Cuadrado extends Figura { float areacua,pericua; float recua() { areacua=side1*side2; return areacua; } float pericua() { pericua=side1*4; return pericua; } } class Circu extends Figura { double areacir, pericir; double cirarea() { areacir=3.14*(Math.pow(rad,2)); return areacir; } double cirpe() { pericir= 2*3.14*rad; return pericir; } } class Tri extends Figura { double areatri, pertri; double aretri() { areatri=(ladob*altura)/2; return areatri; } double peritri() { pertri=ladob+ladoc+ladod; return pertri; } } } //Inicio del programa principalclass Areas{ public static void main(String args[]) { float lad,lad2,radio,tri1,tri2,tri3,tri4; Figura obj=new Figura(); String lec=JOptionPane.showInputDialog(null,"Coloque el 1er lado del cuadrado :",JOptionPane.INFORMATION_MESSAGE); String lec2=JOptionPane.showInputDialog(null,"Coloque el 2do lado del cuadrado :",JOptionPane.INFORMATION_MESSAGE); lad=Float.parseFloat(lec); lad2=Float.parseFloat(lec2); String lecra=JOptionPane.showInputDialog(null,"Coloque el radio del circulo :",JOptionPane.INFORMATION_MESSAGE); radio=Float.parseFloat(lecra); String lectua=JOptionPane.showInputDialog(null,"Coloque la altura del triangulo :",JOptionPane.INFORMATION_MESSAGE); String lectua2=JOptionPane.showInputDialog(null,"Coloque la base(lado B) del triangulo :",JOptionPane.INFORMATION_MESSAGE); String lectua3=JOptionPane.showInputDialog(null,"Coloque el lado D del triangulo :",JOptionPane.INFORMATION_MESSAGE); String lectua4=JOptionPane.showInputDialog(null,"Coloque el lado C del triangulo :",JOptionPane.INFORMATION_MESSAGE); tri1=Float.parseFloat(lectua); tri2=Float.parseFloat(lectua2); tri3=Float.parseFloat(lectua3); tri4=Float.parseFloat(lectua4); obj.atrapando(lad,lad2,radio,tri1,tri2,tri3,tri4); //Imprimiendo Todo JOptionPane.showMessageDialog(null, "El area del Cuadrado es : "+obj.recua); }}
El problema esq en la linea 111, al llamar a "obj.recua" manda error, que puede estar pasando?
lucbel:
Podrias hacer una captura del error?
Decir que clase de exception te da.
Boxcarpilot:
Pues me dice q el obj.recua NO existe
grandzam:
Hola pues, como veo, estas utilizando la herencia mediante clases interiores, por lo cuál, al crear el objeto figura o en algún otro método deberías crear el objeto cuadrado, circulo, etc... Recuerda que al utilizar clases interiores, éstas solo pueden ser creadas dentro de la clase que las engloba. :good:
goldenscriptup:
Estas aplicando mal la Herencia, por que estas usando como tu clase general la clase Figura y dentro de esa clase estas declarando otras clases, diriamos subclases de la clase Figura y aparte a las subclases quieres extenderlas o Heredarlas de la clase Figura, Eso esta mal :blink:
No te recomiendo que quieras usar una clase para inicializar todas las variables, por que si nada mas quieres saber el perimetro de un cuadrado solo mandas a llamar la clase Cuadrado o si quieres saber los datos de un circulo solo mandas a llamar la clase Circulo y asi sucesivamente. El problema que te ocasionaria si tienes una solo clase que inicializa todas las variables de las clases Cuadrado, Circulo y Triangulo tendrias que mandarle todos los parametros a esta funcion.
--- Citar --- void atrapando(float a, float b, float c, float tri1, float tri2, float tri3, float tri4)
{
// los lados del cuadrado
side1=a;
side2=b;
//radio del circulo
rad=c;
//los elementos del triangulo
altura=tri1;
ladob=tri2;
ladod=tri3;
ladoc=tri4;
}
--- Fin de la cita ---
aunque no fuera necesario enviar todos los parametros.
--- Citar ---El problema esq en la linea 111, al llamar a "obj.recua" manda error, que puede estar pasando?
--- Fin de la cita ---
En este problema haces referencia como si el metodo "recua" le perteneciera a la clase Figura pero no es asi, el metodo "recua" le pertenece a la subclase Cuadrado.
En lo personal yo haria 4 clases independientes. ^_^
Una clase Cuadrado, Circulo y Triangulo. Cada clase debe de tener sus metodos para realizar sus operaciones y su constructor para inicializar las variables necesarias y la otra clase seria LlamarFiguras u otro nombre pero que esa clase se encargue de llamar a las demas clases.
Aqui te pongo un ejemplo que te explica la idea y funciona, solo seria cuestion de que crearas las demas clases faltantes.
Creamos una clase Cuadrado
--- Código: Java --- public class Cuadrado { private float side1; //Constructor. Inicializa las variables cuando carga la clase public Cuadrado(float a){ side1 = a; } //Funcion que calcula el area. float calcularArea(){ return side1*side1; } //Funcion que calcula el perimetro float calcularPerimetro(){ return side1 * 4; } }
Creamos una Clase LlamarFiguras
--- Código: Java --- import javax.swing.JOptionPane; public class LlamarFiguras { public static void main(String args[]){ float area, perimetro; /*Se le envia el parametro del lado del cuadro para que el constructor lo cache e inicialice la variable side1. Solamente se manda un lado del cuadrado por que todos sus lados son iguales*/ Cuadrado datoscuadrado = new Cuadrado(5); area = datoscuadrado.calcularArea(); perimetro = datoscuadrado.calcularPerimetro(); JOptionPane.showMessageDialog(null,"El area es: "+area+" n El perimetro es: "+perimetro); /*De aqui para abajo puedes mandar a llamar las demas clases que serian Circulo y Triangulo. */ }}
Espero que te sea de utilidad y cualquier duda no dudes en postearla. Saludos :good:
Navegación
[#] Página Siguiente
Ir a la versión completa