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

Duda POO

Estas en el tema de Duda POO en el foro de Java en Foros del Web. Hola, tengo una duda, y es que tengo una clase que da Herencia a otra, y quiero saber si la principal que tiene un metodo, ...
  #1 (permalink)  
Antiguo 14/01/2012, 19:11
 
Fecha de Ingreso: enero-2012
Mensajes: 40
Antigüedad: 12 años, 3 meses
Puntos: 0
Duda POO

Hola, tengo una duda, y es que tengo una clase que da Herencia a otra, y quiero saber si la principal que tiene un metodo, la subclase puede acceder al metodo de el?
  #2 (permalink)  
Antiguo 14/01/2012, 19:21
Avatar de migue1891  
Fecha de Ingreso: enero-2012
Mensajes: 50
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Duda POO

Claro las herencias pueden darse en objetos con metodos y metodos solos, si es esta ultima se le denomina herencia abstacta
  #3 (permalink)  
Antiguo 14/01/2012, 19:31
 
Fecha de Ingreso: enero-2012
Mensajes: 40
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Duda POO

tengo otra duda:
esto en main:
Velero oVelero=new Velero();
BarcoMotor oBarcoMotor=new BarcoMotor();
Yate oYate=new Yate();
AlquilerAmarre oAlquiler=new AlquilerAmarre();
System.out.print(oYate.eslora());
}

-----------------------------------------
En otra clase: AlqulerAmarre
Barco oBarco=new Barco();
double u=oBarco.eslora(20.0);

-----------------------------------
otra clase: Barco

double eslora;
String matricula;
int añoFabricacion;


public double eslora(double a){
eslora=a;
return eslora;
}}

---------------------------------
clase yate:
public class Yate extends Barco {
int CV;
int camarotes;
public double eslora(){
return eslora;
}

Y en main, no me imprime los 20.0 metros que deberia salir y me da error por que!?!?

muchas gracias de todos formas!
  #4 (permalink)  
Antiguo 14/01/2012, 21:36
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años
Puntos: 69
Respuesta: Duda POO

Bueno, en esta parte:

En otra clase: AlqulerAmarre
Barco oBarco=new Barco();
double u=oBarco.eslora(20.0);

Le estas diciendo que la Eslora del barco "oBarco" es 20...

Luego haces una clase Yate que extiende de Barco..

Y en el Main haces un objeto de Yate e imprimes su eslora.....

Pero tu pusiste que la eslora de oBarco es de 20, meintras que la eslora de oYate nunca la pusiste.... si quieres que te de 20, en la clase Yate tienes que poner return u que es la variable donde tienes la eslora, en teoria la variable es heredada y la puedes usar en yate y hasi en el main, en este caso le estas pidiendo que regrese una eslora que no tiene asociada....

Bueno no me detuve mucho a nalaizar el código, no se si sea la respuesta, tambien debes poner que error te dio para ayudarte....

chao
  #5 (permalink)  
Antiguo 15/01/2012, 04:23
 
Fecha de Ingreso: enero-2012
Mensajes: 40
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Duda POO

copio el codigo exactamente:

package Alquiler;

import java.util.Scanner;

public class AlquilerAmarre {

public static void main(String[] args){
int d;
int m;
int a;
int df;
int mf;
int af;
String nombre;
Long DNI;
String posicion;
Barco oBarco=new Barco();

BarcoMotor oBarcoMotor=new BarcoMotor();
Velero oVelero=new Velero();
Yate oYate=new Yate();


oBarco.eslora(20.0);
System.out.println("Día de empieze");
d=(int)LeerNum();
System.out.println("Mes de empieze");
m=(int)LeerNum();
System.out.println( "Año de empieze");
a=(int)LeerNum();
System.out.println("Día de fin");
df=(int)LeerNum();
System.out.println("Mes de fin");
mf=(int)LeerNum();
System.out.println("Año de fin");
af=(int)LeerNum();
if(d<=dias(m,a)&& m>0 ){
System.out.println("Fecha bien");
}
if(df<=dias(mf,af)&& mf>0 ){
System.out.println("Fecha bien");
}

System.out.print(avanzar(d,df,m,mf,a,af));

System.out.print("yate"+oYate.esloraYate());

}
public static int avanzar(int d, int df,int m, int mf,int a, int af){
int dT=0;

for(int i=0;i<200;i++){
if (d==df && m==mf && a==af){
break;
}
d = d + 1;
if (d > dias(m,a)) {
d = 1;
m = m + 1;}
if (m>12) {
m=1;
a=a+1;}
dT=dT+1;


}return dT;}
public static int mes(int m){
if(m>12 ||m<=0){
System.out.println("Mes erroneo");
}
int []diames={0,31,28,31,30,31,30,31,31,30,31,30,31};
return diames[m];
}
public static int dias(int m,int a) {
int result = mes(m);

if (m==2 && esBisiesto(a)) {
result = result+1;
}
return result;
}
public static boolean esBisiesto(int a) {
return ((a % 4 == 0) && (a % 100 !=0) || (a % 400 == 0));
}
public static double LeerNum(){
Scanner leer = new Scanner(System.in);
Double a=leer.nextDouble();
return a;
}
}
-----------------------------------------------------------------------------------

package Alquiler;

public class Barco {


double eslora;
String matricula;
int añoFabricacion;


public void eslora(double a){
eslora=a;

}
public double devolverEslora(){
return eslora;
}
}
----------------------------------------

package Alquiler;

public class Yate extends Barco {
int CV;
int camarotes;

public double esloraYate(){
double a=devolverEslora();
return a;
}
}


---------------------------------
se supone que al principi a oBarco le doy de eslora 20.0, entonces se debería de quedar a 20.0 y yate entonces debnería de cogerlo no??? porque al imprimir en alquiler no da los 20.0 ;S;S
  #6 (permalink)  
Antiguo 16/01/2012, 04:47
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Duda POO

Creo que te confundes, que la clase Yate herede de la clase Barco no quiere decir que todos los objetos compartan los datos.

Tu estás creando un objeto de la clase Barco y le estás pasando el valor de eslora de 20 y luego creas otro objeto distinto de la clase Yate.

Ese objeto no va a tener el valor 20 de eslora porque no se lo has dado.

Tendrás que usar el método eslora para asignarle el valor.

Código Java:
Ver original
  1. Yate oYate = new Yate();
  2. oYate.eslora(20);
  3.  
  4. oYate.devolverEslora(); //Así devuelves la eslora
  #7 (permalink)  
Antiguo 17/01/2012, 21:50
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años
Puntos: 69
Respuesta: Duda POO

Te vuelvo a dejar mi respuesta por si se te paso leerla...

...tu pusiste que la eslora de oBarco es de 20, meintras que la eslora de oYate nunca la pusiste....

Ese es el core, la variable eslora si es heredada pero no con el valor por que el valor de 20 lo tiene un objeto y el valor es diferente para otro objeto...

Con el yate puedes usar la eslora pero no valdra 20 por que los 20 son de otro objeto, si quieres que todos los barcos y los yates tengan la misma eslora deberas hacer la eslora estatica, y asi en teoria te daria lo que tu quieres...

algo así en la clase barco
Código PHP:
static double eslora
Con eso todos los objetos tendrán la misma eslora....

Etiquetas: clase, poo
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 08:18.