Jump to content

LLamar un metodo de una clase a otra


Recommended Posts

Buenas, soy nuevo en programación en java y quisiera hacer la sgte consulta.

 

Estoy realizando unas clases referente a juegos RPG.

 

sin-titulo-153854.jpg

 

los Pjs heredan sus características de la clase "características" tales como nombre, lvl y clase

los 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

 

sin-titulo2-153856.jpg

 

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

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 by bersek
Link to comment
Share on other sites

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 constructor

y 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 by AtanLaiDer
Link to comment
Share on other sites

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 constructor

y 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 double

0 para int, long,short y byte

'\u000' para las varibles de tipos char

null 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 by bersek
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...