Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Atributos de clase

Estas en el tema de Atributos de clase en el foro de Java en Foros del Web. alguien me puede poner un ejemplo de como funciona un atributo de clase, pq googleo y leo pero no me entero( jeje menuda rima) por ...
  #1 (permalink)  
Antiguo 16/04/2013, 02:40
 
Fecha de Ingreso: agosto-2004
Mensajes: 265
Antigüedad: 19 años, 8 meses
Puntos: 0
Atributos de clase

alguien me puede poner un ejemplo de como funciona un atributo de clase, pq googleo y leo pero no me entero( jeje menuda rima)

por ejemplo

Persona jugador; (Persona es de otra clase, atributos privados nombre, edad)

Ahora desde la clase actual, existe alguna forma de meterle datos a jugador.nombre y jugador.edad , desde el constructor? sin usar el set

os agradecería un pequeño ejemplo o web donde explique algo asi, pq busco y busco..

mil gracias
__________________
Recuerda que si señalas con el dedo, el resto de los dedos te señalan a ti!
  #2 (permalink)  
Antiguo 16/04/2013, 04:46
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Atributos de clase

Se llaman atributos de clase a aquellos atributos a los que puedes llamar invocando directamente la clase que los contiene, sin crear ningún objeto a partir de esa clase.

Se conocen como atributos estáticos debido al tipo de modificador que utilizan (static).

Un ejemplo de utilidad muy extendida de estos atributos es para las clases contenedoras de constantes:

public class Constants {

public static String HOLA_MUNDO= "HOLA MUNDO";

}

// Para llamarla solo tienes que escribir
String holaMundo = Constants.HOLA_MUNDO;
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 16/04/2013, 04:55
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Atributos de clase

Creo que estás confundiendo los atributos de clase con los de instancia, de todos modos.

La forma de introducir atributos sin usar get y set es a través de un nuevo constructor con los parámetros que quieres añadir:

Para eso tienes que definir el constructor en la clase que va a modificar esos atributos

Ejemplo

public Class Coche() {

private String marca;
private String modelo;
private String color;

// Constructor por defecto. NO es necesario crearlo porque ya existe al crear la clase
public Coche() {}

// Constructor con algunos parámetros, no se suelen usar, pero te los puedes encontrar
public Coche(String marca, String modelo) {
this.marca = marca;
this.modelo = modelo;
}

// Constructor completo, es el mas usado. Cuando no se quiere setear un parámetro se envía null si es un objeto o un valor predeterminado si es algún tipo primitivo
public Coche(String marca, String modelo, String color) {
this.marca = marca;
this.modelo = modelo;
this.color = color;
}

}

// Ahora puedes hacer
String marca = "UnaMarca";
String modelo = "UnModelo";
String color = "UnColor";
Coche unCoche = new Coche(marca,modelo,color); // Y ya lo crea con los datos que le pasas
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #4 (permalink)  
Antiguo 16/04/2013, 08:26
 
Fecha de Ingreso: agosto-2004
Mensajes: 265
Antigüedad: 19 años, 8 meses
Puntos: 0
Respuesta: Atributos de clase

Cita:
Iniciado por Fuzzylog Ver Mensaje
Creo que estás confundiendo los atributos de clase con los de instancia, de todos modos.

La forma de introducir atributos sin usar get y set es a través de un nuevo constructor con los parámetros que quieres añadir:

Para eso tienes que definir el constructor en la clase que va a modificar esos atributos

Ejemplo

public Class Coche() {

private String marca;
private String modelo;
private String color;

// Constructor por defecto. NO es necesario crearlo porque ya existe al crear la clase
public Coche() {}

// Constructor con algunos parámetros, no se suelen usar, pero te los puedes encontrar
public Coche(String marca, String modelo) {
this.marca = marca;
this.modelo = modelo;
}

// Constructor completo, es el mas usado. Cuando no se quiere setear un parámetro se envía null si es un objeto o un valor predeterminado si es algún tipo primitivo
public Coche(String marca, String modelo, String color) {
this.marca = marca;
this.modelo = modelo;
this.color = color;
}

}

// Ahora puedes hacer
String marca = "UnaMarca";
String modelo = "UnModelo";
String color = "UnColor";
Coche unCoche = new Coche(marca,modelo,color); // Y ya lo crea con los datos que le pasas
// cogiendo este ejemplo, yo quiero hacer esto


public class otraClase
{

Coche dueño; <-- creo un objeto de la clase Coche

public otraClase() <-constructor vacio, inicializa atributos de la otra clase
{
dueño.marca="seat";
dueño.modelo="ibiza";
dueño.color="rojo";

}

public static void main(String args[])
{

Coche p=new Coche(); <- creo instancia,pero tengo un problema

p.verCoche(); <- yo quiero que se vean los datos creados desde el constructor

<- logicamente se ven los instanciados en P, y como en P no le puse datos, me esta cargando y cogiendo el constructor vacio.



}


entonces pense en esta segunda posibilidad


public class otraClase
{

Coche dueño; <-- creo un objeto de la clase Coche

Coche p = new Coche();

public otraClase() <-constructor de esta clase, inicializa atributos de la otra clase
{
p.setmarca("seat"); <- cargo los atributos desde set
p.setmodelo("ibiza");
p.setcolor("rojo");

}

public static void main(String args[])
{



p.verCoche(); <- tampoco funciona pq no reconoce p, y lo he puesto public el p y tampoco





}
__________________
Recuerda que si señalas con el dedo, el resto de los dedos te señalan a ti!
  #5 (permalink)  
Antiguo 16/04/2013, 08:44
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Atributos de clase

El main deberias lanzarlo en una clase aparte

Imaginate tener esto:

public Class Aplicacion {

//Metodo main
// Dentro del main tendrás algo como esto
Coche coche = new Coche("Audi","R8","Rojo");
Persona p = new Persona(coche )
p.verCoche();
}


public Class Persona {

private Coche coche;

public Persona(Coche coche) {
this.coche=coche;
}

public void verCoche() {
if (this.coche != null) {
System.out.println(this.coche.getMarca() + ", " + this.coche.getModelo() + ", " +this.coche.getColor() + ".")
} else {
System.out.println("Esta persona no tiene coche");
}
}

}

public Class Coche {

//Lo que ya teniamos de antes

}

Cuando ejecutes la aplicacion irá a buscar el metodo main, lo encontrará en la clase Aplicación y lo ejecutará. Si no encuentra las clases puede ser que tengas mal configurado el ClassPath de la aplicación, que es donde deben ir los archivos .class, que son los .java ya compilados.

Espero que te lo haya aclarado.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #6 (permalink)  
Antiguo 16/04/2013, 11:08
 
Fecha de Ingreso: agosto-2004
Mensajes: 265
Antigüedad: 19 años, 8 meses
Puntos: 0
Respuesta: Atributos de clase

lo he comprobado y funciona, perfecto pero falta una cosa que me pide el ejercicio

este es el ejercicio, que he pasado segun me lo has puesto


public class Persona
{

private Coche coche;


aqui esta el problema, el ejercicio me pide, que a un constructor que no le llega nada, sea capaz de inicialiar la clase Coche, es decir desde aqui , no desde el main, por eso pego yo todas las vueltas, no encuentro la forma
enunciado
Un método constructor sin parámetros que se encargará de crear los correspondientes objetos Coche asignando como marca la correspodiente marca. etc


public Persona(Coche coche)
{
this.coche=coche;
}

public void verCoche()
{
if (this.coche != null)
System.out.println(this.coche.getMarca() + ", " + this.coche.getModelo() + ", " +this.coche.getColor() + ".");
else
System.out.println("Esta persona no tiene coche");

}

}

----


y la clase coche como estaba
----


mil gracias por tu tiempo
__________________
Recuerda que si señalas con el dedo, el resto de los dedos te señalan a ti!

Última edición por ircop; 16/04/2013 a las 11:16
  #7 (permalink)  
Antiguo 16/04/2013, 16:48
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Atributos de clase

en la clase Persona puedes tener un metodo crearCoche() cuyo código sea

public void crearCoche() {
Coche coche = new Coche();
coche.setMarca("defaultMarca");
coche.setModelo("defaultModelo");
coche.setColor("defaultColor");
this.coche = coche;
}

Desde el main llamarías a p.crearCoche(); y luego a p.verCoche();

Lo que no tengo tan claro yo es que se te esté pidiendo realmente eso que dices que se te pide. Igual es lo que crees que te pide pero no has entendido bien el resultado. En cualquier caso consúltalo con tu profesor utilizando las diferentes variantes que has visto aquí tratando de entender qué es lo que realmente quiere.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #8 (permalink)  
Antiguo 17/04/2013, 07:31
 
Fecha de Ingreso: agosto-2004
Mensajes: 265
Antigüedad: 19 años, 8 meses
Puntos: 0
Respuesta: Atributos de clase

Mil gracias


es eso lo que buscaba, lo he probado y funciona.

de todas maneras tienes razón, es raro de narices este planteamiento, una vez visto en el bluej, voy a preguntarle a mi profesora.

mil gracias
__________________
Recuerda que si señalas con el dedo, el resto de los dedos te señalan a ti!

Etiquetas: atributos, clase
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:07.