Programación General > Java

 Problema al Heredar clases

(1/2) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa