AtanLaiDer Posted January 21, 2012 Report Share Posted January 21, 2012 Buenas, soy nuevo en programación en java y quisiera hacer la sgte consulta. Estoy realizando unas clases referente a juegos RPG. los Pjs heredan sus características de la clase "características" tales como nombre, lvl y claselos datos se los asigno en el constructor de la clase (por ejemplo) PjAlto. package Lineage; public class PjAlto extends Caracteristicas{ public PjAlto (int lvl, String nombre, String clase){ super(lvl, nombre, clase); } public void datosPjAlto(){ System.out.println(nombre); System.out.println(lvl); System.out.println(clase); } public String nombrePj(){ return nombre; } String clasePj(){ return clase; } String lvlPj(){ String lvlPjAlto = Integer.toString(lvl); return lvlPjAlto; } } los datos los recupero con los métodos accesadores, ahora, el problema es que quiero que los datos que asignos a las clase PjAlto y PjBajo se muestren en la clase "Acciones" package Lineage; import Lineage.PjAlto; public class Acciones { public void Datos(){ String a,b,c; a = PjAlto.nombrePj(); b = PjBajo.NombrePjLow(); System.out.println("Datos Pj Alto"); System.out.println(a); // System.out.println(b); // System.out.println(c); } } me sale el sgte error así que hice que los métodos accesadores y las variables fueran static, pero resulta que obtienen el valor de la clase padre y esos datos son los que me muestra y no los de cada clase hija. Lo que quiero hacer es que al momento de llamar el metodo print de la clase "Acciones" me muestre los datos o metodos accesadores de las clase "PjAlto" y "PjBajo", ojala me puedan ayudar, de antemanos, Gracias Link to comment Share on other sites More sharing options...
bersek Posted January 21, 2012 Report Share Posted January 21, 2012 (edited) el error esta en que probablemente los metodos que usas como geter son estaticos.y al ser estaticos, no se puede usar miebros de instancia desde dentro de ellos tu solucion es sacarle el static y llamarlos mediante una referencia al objeto ejemplo PjAlto p=new PjAlto();String nombre=p.getNombrePjAlto(); .pd: la relacion de herencia no pasa la prueba "es un" para saber si existe dicha relacion entre dos clases debes preguntarte : un PjAlto es una caracteristica? << -- definitivamente no xdd mas bien yo le pondria la clase Actor y la clase pjAlto podria llamarse personaje Edited January 21, 2012 by bersek Link to comment Share on other sites More sharing options...
AtanLaiDer Posted January 21, 2012 Author Report Share Posted January 21, 2012 (edited) Al implementar tu solución tendría que pasarle argumentos al constructor: PjAlto p=new PjAlto(5, "S", "a"); //(ya que el constructor de la clase PjAlto tiene 3 variables)String nombre=p.getNombrePjAlto(); ya que si no lo hago, me arroja error por no dar argumentos al constructory al hacer eso, utiliza el método que llamo, pero me muestra los argumentos que le entregue al objeto cuando se hizo la referencia y lo que deseo es que me muestre los datos que ya están en ese método en la clase PjAlto. PD: Lo de la herencia tienes razón xD, cuando compile y funcione lo cambiare =) Edited January 21, 2012 by AtanLaiDer Link to comment Share on other sites More sharing options...
bersek Posted January 22, 2012 Report Share Posted January 22, 2012 (edited) Al implementar tu solución tendría que pasarle argumentos al constructor: PjAlto p=new PjAlto(5, "S", "a"); //(ya que el constructor de la clase PjAlto tiene 3 variables)String nombre=p.getNombrePjAlto(); ya que si no lo hago, me arroja error por no dar argumentos al constructory al hacer eso, utiliza el método que llamo, pero me muestra los argumentos que le entregue al objeto cuando se hizo la referencia y lo que deseo es que me muestre los datos que ya están en ese método en la clase PjAlto. PD: Lo de la herencia tienes razón xD, cuando compile y funcione lo cambiare =) Los constructores sirven para inicializar variables de instancia y llamar métodos que necesitan ser inicializados cuando se construye el objeto en java como lenguaje orientado a objeto, existe lo que se conoce como sobrecarga de metodos ,perfectamente en tu clase PjAlto podrias tener un constructor sin argumentos public PjAlto(); y podrias llamarlo sin problemas, lo malo es que si tienes variables de instancia estas van a quedar con su valor por defecto ( a menos que ya les ayas asignado un valor) 0.0 para float y double0 para int, long,short y byte'\u000' para las varibles de tipos charnull para las referencias a objetos luego de eso tendrias que llamar a su respectivo setter para asignarle un valor mucho atado, no crees? cuento corto create un constructor que no reciba argumentos y satea las variables de instancias cuando las crees, con eso haces la llamada al metodo usando la referencia creada y no deberias tener dramas saludos Edited January 22, 2012 by bersek Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now