Polimorfismo
Supongamos que tengo una clase Cuadrado y una clase que extiende de ésta llamada CuadradoColor
Ambas clases tiene un método quienSoy() que devuelve en un string "Cuadrado" o "CuadradoColor"
¿cómo puededo forzar el quienSoy() de Cuadrado si soy un CuadradoColor()?
Muchas gracias a todos
Aqui teneis un codigo que hace algo parecido
class Cuadrado{
// Atributos
private double ancho;
private double alto;
// Constructores
Cuadrado (double w, double h){ // Constructor cuando se
// especifican dimensiones
ancho = w;
alto = h;
}
Cuadrado (){ //Constructor cuando no se especifiquen
//dimensiones
ancho = 1;
alto = 1;
}
// Metodos
public String quienSoy() {
return "Cuadrado";
}
double volumen() { //Devuelve el volumen del cuadrado
return ancho * alto;
}
}
class CuadradoColor extends Cuadrado { // Clase CuadradoColor hereda
//de la Clase Cuadrado
int color; //Añade el atributo color
//Metodo
public String quienSoy() {
return "CuadradoColor";
}
// Constructores
CuadradoColor (double w, double h, int c){ // Constructor
//cuando se especifican dimensiones
super (w, h);
color = c;
}
CuadradoColor (){ //Constructor cuando no se especifiquen
//dimensiones
super();
color = -1;
}
}
public class PruebaCuadrado{
public static void main (String [] args){
Cuadrado miCuadrado1 = new Cuadrado (); // Creamos
//dos objetos sin inicializar
Cuadrado miCuadrado2 = new CuadradoColor ();
double vol;
String llamada;
// Llamada a un metodo para miCuadrado1
vol = miCuadrado1.volumen ();
System.out.println ("El volumen de miCuadrado1 es " + vol);
// Llamada a un metodo para miCuadrado2
vol = miCuadrado2.volumen ();
System.out.println ("El volumen de miCuadrado2 es " + vol);
llamada = miCuadrado1.quienSoy ();
System.out.println ("Yo soy un: " + llamada);
llamada = miCuadrado2.quienSoy();
System.out.println ("Y yo soy un: " + llamada);
}
}
Ambas clases tiene un método quienSoy() que devuelve en un string "Cuadrado" o "CuadradoColor"
¿cómo puededo forzar el quienSoy() de Cuadrado si soy un CuadradoColor()?
Muchas gracias a todos
Aqui teneis un codigo que hace algo parecido
class Cuadrado{
// Atributos
private double ancho;
private double alto;
// Constructores
Cuadrado (double w, double h){ // Constructor cuando se
// especifican dimensiones
ancho = w;
alto = h;
}
Cuadrado (){ //Constructor cuando no se especifiquen
//dimensiones
ancho = 1;
alto = 1;
}
// Metodos
public String quienSoy() {
return "Cuadrado";
}
double volumen() { //Devuelve el volumen del cuadrado
return ancho * alto;
}
}
class CuadradoColor extends Cuadrado { // Clase CuadradoColor hereda
//de la Clase Cuadrado
int color; //Añade el atributo color
//Metodo
public String quienSoy() {
return "CuadradoColor";
}
// Constructores
CuadradoColor (double w, double h, int c){ // Constructor
//cuando se especifican dimensiones
super (w, h);
color = c;
}
CuadradoColor (){ //Constructor cuando no se especifiquen
//dimensiones
super();
color = -1;
}
}
public class PruebaCuadrado{
public static void main (String [] args){
Cuadrado miCuadrado1 = new Cuadrado (); // Creamos
//dos objetos sin inicializar
Cuadrado miCuadrado2 = new CuadradoColor ();
double vol;
String llamada;
// Llamada a un metodo para miCuadrado1
vol = miCuadrado1.volumen ();
System.out.println ("El volumen de miCuadrado1 es " + vol);
// Llamada a un metodo para miCuadrado2
vol = miCuadrado2.volumen ();
System.out.println ("El volumen de miCuadrado2 es " + vol);
llamada = miCuadrado1.quienSoy ();
System.out.println ("Yo soy un: " + llamada);
llamada = miCuadrado2.quienSoy();
System.out.println ("Y yo soy un: " + llamada);
}
}
Si no me equivoco es asi...
Si instancias a la clase PADRE tendras acceso a los dos metodos si estos no tienen alguna restriccion como PRIVATE, entonces diferenciaras a los metodos por los parametros que reciba...
Si instancias a la clase EXTENDIDA entonces no podra existir polimorfismo ya que solo tienes acceso al metodo de la clase extendida.
Si tienes dudas me escribes [email protected]
Si instancias a la clase PADRE tendras acceso a los dos metodos si estos no tienen alguna restriccion como PRIVATE, entonces diferenciaras a los metodos por los parametros que reciba...
Si instancias a la clase EXTENDIDA entonces no podra existir polimorfismo ya que solo tienes acceso al metodo de la clase extendida.
Si tienes dudas me escribes [email protected]