Autor
|
Tema: Duda sobre combinar métodos de una clase en otra (Leído 2,013 veces)
|
Beginner Web
Desconectado
Mensajes: 634
youtu.be/0YhflLRE-DA
|
Bueno tengo un Proyecto llamado ProyectoCelular y otro ProyectoCalculadora, quiero que la clase Celular del Proyecto ProyectoCelular pueda tener los metodos que tiene la clase Calculadora del ProyectoCalculadora ¿Cual es la forma correcta? Tener en cuenta que la clase Celular debe poder hacer uso de los metodos de la clase Calculadora package principal; import clases.Celular; import clases.Calculadora; public class ProyectoCelular { public static void main (String[] args ) { // Esto es el main todavia no lo terminé } }
package clases; import java.lang.Math.*; public class Calculadora { private String marca, modelo, sistemaOperativo, versionSistemaOperativo ; this.marca = marca; this.modelo = modelo; this.sistemaOperativo = sistemaOperativo; this.versionSistemaOperativo = versionSistemaOperativo; } /** * * @param a * @param b * @return La suma entre a y b */ public float sumar(float a, float b) { return a + b; } /** * * @param a * @param b * @return La resta entre a y b */ public float restar(float a, float b) { return a - b; } /** * * @param a * @param b * @return La multiplicación entre a y b */ public double multiplicar(double a, double b) { if (a == 0 || b == 0) { return 0; } else { return a * b; } } /** * * @param a * @param b * @return La división entre a y b */ public double dividir(float a, float b) { return a / b; } /** * * @param n * @return El factorial de un numero */ public int factorial(int n) { if (n < 1) { return 1; } else { return n * factorial(n - 1); } } /** * @return the marca */ return marca; } /** * @param marca the marca to set */ public void setMarca (String marca ) { this.marca = marca; } /** * @return the modelo */ return modelo; } /** * @param modelo the modelo to set */ public void setModelo (String modelo ) { this.modelo = modelo; } /** * @return the sistemaOperativo */ public String getSistemaOperativo () { return sistemaOperativo; } /** * @param sistemaOperativo the sistemaOperativo to set */ public void setSistemaOperativo (String sistemaOperativo ) { this.sistemaOperativo = sistemaOperativo; } /** * @return the versionSistemaOperativo */ public String getVersionSistemaOperativo () { return versionSistemaOperativo; } /** * @param versionSistemaOperativo the versionSistemaOperativo to set */ public void setVersionSistemaOperativo (String versionSistemaOperativo ) { this.versionSistemaOperativo = versionSistemaOperativo; } }
//Me parece que aca es donde tengo que poner algo de la clase Calculadora package clases; public class Celular { private String marca, modelo, color ; private double precio; this.marca = marca; this.modelo = modelo; this.color = color; this.precio = precio; } /** * @return the marca */ return marca; } /** * @param marca the marca to set */ public void setMarca (String marca ) { this.marca = marca; } /** * @return the modelo */ return modelo; } /** * @param modelo the modelo to set */ public void setModelo (String modelo ) { this.modelo = modelo; } /** * @return the color */ return color; } /** * @param color the color to set */ public void setColor (String color ) { this.color = color; } /** * @return the precio */ public double getPrecio() { return precio; } /** * @param precio the precio to set */ public void setPrecio(double precio) { this.precio = precio; } }
|
|
« Última modificación: 4 Abril 2019, 04:06 am por Beginner Web »
|
En línea
|
7w7
|
|
|
rub'n
Desconectado
Mensajes: 1.217
(e -> λ("live now")); tatuar -> λ("α");
|
En el constructor de la clase Celular puedes añadir un parámetro tipo Calculadora, o un setter.
Vía herencia también. Cuando llegue a la casa te ayudo más estoy en la caverna del curro. Bien aquí vamos, vamos a usar Herencia con la palabra reservada extends en la clase Celular
Otra vía es por medio de interfaces
Investigar - herencia simple de clases
- Uso de super
- Modificador de acceso protected
[/list] package foro; import java.lang.Math.*; import java.util.logging.Logger; /** * Clase Calculadora */ public class Calculadora { private String sistemaOperativo ; private String versionSistemaOperativo ; public static final Logger LOGGER = Logger.getLogger(ProyectoCelular.class.getSimpleName()); public Calculadora() { super(); } this.marca = marca; this.modelo = modelo; this.sistemaOperativo = sistemaOperativo; this.versionSistemaOperativo = versionSistemaOperativo; } /** * * @param a * @param b * @return La suma entre a y b */ public float sumar(float a, float b) { return a + b; } /** * * @param a * @param b * @return La resta entre a y b */ public float restar(float a, float b) { return a - b; } /** * * @param a * @param b * @return La multiplicación entre a y b */ public double multiplicar(double a, double b) { if (a == 0 || b == 0) { return 0; } else { return a * b; } } /** * * @param a * @param b * @return La división entre a y b */ public double dividir(float a, float b) { return a / b; } /** * * @param n * @return El factorial de un numero */ public int factorial(int n) { if (n < 1) { return 1; } else { return n * factorial(n - 1); } } /** * @return the marca */ return marca; } /** * @param marca the marca to set */ public void setMarca (String marca ) { this.marca = marca; } /** * @return the modelo */ return modelo; } /** * @param modelo the modelo to set */ public void setModelo (String modelo ) { this.modelo = modelo; } /** * @return the sistemaOperativo */ public String getSistemaOperativo () { return sistemaOperativo; } /** * @param sistemaOperativo the sistemaOperativo to set */ public void setSistemaOperativo (String sistemaOperativo ) { this.sistemaOperativo = sistemaOperativo; } /** * @return the versionSistemaOperativo */ public String getVersionSistemaOperativo () { return versionSistemaOperativo; } /** * @param versionSistemaOperativo the versionSistemaOperativo to set */ public void setVersionSistemaOperativo (String versionSistemaOperativo ) { this.versionSistemaOperativo = versionSistemaOperativo; } @Override final StringBuilder sb = new StringBuilder("\nCalculadora"); sb.append("\nmarca='").append(marca).append("\n"); sb.append(", modelo='").append(modelo).append("\n"); sb.append(", sistemaOperativo='").append(sistemaOperativo).append("\n"); sb.append(", versionSistemaOperativo='").append(versionSistemaOperativo).append("\n"); return sb.toString(); } }
Cuando establecemos herencia, de una clase con un constructor definido como el tuyo, debemos invocarlo con super() y si tiene parámetros setearselos en este caso la clase celular tiene 2 atributos propios de ella, el color y precio, entonces, bastaría con dejar los setters/getters de color y precio, ya que los otros se heredan
La visibilidad de los atributos/variables de instancia, siendo protected tendrán visibilidad en el mismo paquete, para verlas desde otro paquete deben ser publicas, pero por convención en java, deberían ser en lo posible declaradas como private, accediendo a ellas via getters
package foro; /** * Clase Celular */ public class Celular extends Calculadora { // extendemos a Calculadora //private String marca; //private String modelo; // estas dos variables no hacen falta, porque se heredan tambien private double precio; /** * Nuevo constructor vacio */ public Celular() { super(); // super invoca al constructor de la clase Calculadora } /** * con este super invocamos al constructor de la clase Calculadora, seteandole los parametros * correspondientes chavalina. */ super(marca,modelo, sistemaOperativo,versionSistemaOperativo); this.color = color; this.precio = precio; } /** * @return the marca */ return marca; } /** * @param marca the marca to set */ public void setMarca (String marca ) { this.marca = marca; } /** * @return the modelo */ return modelo; } /** * @param modelo the modelo to set */ public void setModelo (String modelo ) { this.modelo = modelo; } /** * @return the color */ return color; } /** * @param color the color to set */ public void setColor (String color ) { this.color = color; } /** * @return the precio */ public double getPrecio() { return precio; } /** * @param precio the precio to set */ public void setPrecio(double precio) { this.precio = precio; } @Override final StringBuilder sb = new StringBuilder(); sb.append(super.toString()); sb.append("\ncolor='").append(color).append("\n"); sb.append(", precio=").append(precio); return sb.toString(); } }
package foro; public class ProyectoCelular { public static void main (String[] args ) { // Esto es el main todavia no lo terminé final Celular celular = new Celular(); /** * Configurando por medio de setters NO-THREAD-SAFE */ celular.setColor("Rojo"); celular.setMarca("Samsung"); celular.setModelo("I9300"); celular.setPrecio(200); celular.setSistemaOperativo("Android KitKat"); celular.setVersionSistemaOperativo("4.4.4"); /** * Todos ellos retornan un valor * que puedes mostrar con la consola o logger, logger es lo mas correcto */ celular.factorial(2); celular.dividir(2,3); celular.sumar(2,3); celular.restar(5,1); celular.multiplicar(5,5); Calculadora.LOGGER.info(celular.toString()); } }
Estamos en presencia de un constructor telescópico, muchos parámetros a veces difícil de usar, coste de mantenimiento, legibilidad etc, patrón Builder es la solución.
A simple vista pensarías, bueno me creo otro constructor y le añado parámetros, pero vienes de nuevo y añades otro y así, nunca terminara, o este mismo contructor añadirle mas parámetros.
O la típica vía de usar setters, NO-THREAD-SAFE, es decir no Inmutable(Como String, StringBuffer, la api LocalDate del paquete java.time), si usas ese bean en un Thread podrian pasar cosas raras y difíciles de resolver. tema que, podemos tratar luego.
/** * con este super invocamos al constructor de la clase Calculadora, seteandole los parámetros * correspondientes chavalina. */ super(marca,modelo, sistemaOperativo,versionSistemaOperativo); this.color = color; this.precio = precio; }
Recuerda retomar este hilo y estudiarlo bien , donde tienes otro ejemplo de herencia https://foro.elhacker.net/java/metodo_mostrar_todos_los_atributos_de_un_objeto_por_pantallaresuelto-t494141.0.htmlEn la clase Celular te puse unos bugs que debes de resolver, recuerda que hay métodos en la clase Celular que no te hacen falta, es decir, puedes quitarlos, debido a que los heredas
|
|
« Última modificación: 6 Abril 2019, 02:16 am por rub'n »
|
En línea
|
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
LLamar los Metodos de un Midlet desde otra clase
Java
|
o__Near__o
|
6
|
7,738
|
13 Julio 2011, 22:10 pm
por o__Near__o
|
|
|
Acceder a una variable privada de una clase desde otra clase
Programación C/C++
|
Alvaro093
|
4
|
30,453
|
27 Enero 2012, 09:46 am
por wachi
|
|
|
como apuntar a una struc de otra clase con un puntero de otra clase?. xD
Programación C/C++
|
anonimo12121
|
3
|
3,714
|
21 Junio 2012, 09:58 am
por anonimo12121
|
|
|
Ayuda llamar a una clase y sus métodos dentro de otra clase (Android)
Java
|
LikeVodka
|
1
|
6,232
|
19 Abril 2015, 11:22 am
por MNicolas
|
|
|
Mandar a traer metodos de una clase a otra clase en python
Dudas Generales
|
snow915
|
1
|
3,135
|
17 Junio 2017, 03:31 am
por engel lex
|
|