Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > POO

ayuda no se en que estoy mal en el codigo quiero llamar al metodo setPlaca desde el metodo main, el IDE me marca error

package gestion_taller;

public class Motocicleta extends Cliente {

private double precio;
private int LLanta;

public Motocicleta(String Nombre,String Apellido,String Domicilio,String Placas){
super(Nombre,Apellido,Domicilio);
super.Placas = Placas;
precio = 32.50;
}

public void setPlaca(String placa){
this.Placas = placa;
}

public void setTotal(int llanta){
if(llanta > 1){
this.total = precio * llanta;
}
}

public void Datos(){
super.Datos();
System.out.println("Placa Motocicleta: " +this.getPlacas());
System.out.println("Total a pagar: " +this.getTotal());
}

package gestion_taller;

public class Cliente {

protected String nombre, Apellido,Placas,Domicilio;
protected double total;

public Cliente(String nombre, String Apellido, String Domicilio) {
this.nombre = nombre;
this.Apellido = Apellido;
this.Domicilio = Domicilio;
}

public Cliente(String Placas) {
this.Placas = Placas;
}

public String getNombre() {
return nombre;
}

public String getApellido() {
return Apellido;
}

public String getDomicilio() {
return Domicilio;
}

public String getPlacas() {
return Placas;
}

public double getTotal(){
return total;
}

public void Datos(){
System.out.println("Datos del Cliente: ");
System.out.println("Nombre: " +this.getNombre());
System.out.println("Apellido: " +this.getApellido());
System.out.println("Domicilio: " +this.getDomicilio());
}

public void Placa(){
System.out.println("Placas: " +this.getPlacas());
}
}

package gestion_taller;

import java.util.Scanner;

/**
*
* @author salvador
*/
public class Gestion_Taller {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
String nombre, Apellido,Placas,Domicilio;
int auto = 0,llanta;
Scanner sc = new Scanner(System.in);
System.out.println("Nombre cliente");
nombre = sc.next();
System.out.println("Apellido Cliente");
Apellido = sc.next();
System.out.println("Domicilio Cliente");
Domicilio = sc.next();
Cliente cliente1 = new Cliente(nombre,Apellido,Domicilio);
cliente1.Datos();
System.out.println("cambio de llantas ");
System.out.println("1. Auto");
System.out.println("2. Motocicleta ");
auto = sc.nextInt();
if(auto == 1){
System.out.println("numero de cambio de llanta en Auto");
System.out.println("ingrese placas Auto");
String placa = sc.next();
cliente1.setPlaca(placa); marca error
System.out.println("ingrese llantas cambiadas");
llanta = sc.nextInt();
cliente1.setTotal(llanta); // marca error
}else{
System.out.println("numero de cambio de llanta en moto");
cliente1.Datos();
cliente1.Placa();
}

}
}

abril 13, 2016 | Unregistered Commentersalver

Es porque los métodos setPlaca() y setTotal() no están definidos en la clase Cliente. Además. la variable cliente1 es del tipo Cliente no de su subclase Motocicleta; por lo tanto sólo cubre lo que está definido en la clase Cliente. Si bien una variable de un tipo dado se le pueden asignar como valor un objeto de una subclase de ésta, como
Cliente cliente1 = Motocicleta(...);
cliente1 no conocerá lo métodos y campos que son originales de Motocicleta, porque al hacerlo del tipo Cliente no fue definida para ellos. Por ejemplo, una variable de tipo Object, que es la raíz de todos las clases, puede hacer referencia a cualquier objeto, pero sólo se podrá acceder a los métodos definidos en ésta.
Así que una posible solución sería poner ésos métodos en la superclase Cliente o bien que cambies la variable cliente1 por esto:
Motocicleta motocicleta1 = new Motocicleta(...);
Tambén se podría hacer uso del casting, pero mejor aprenderlo todo a su tiempo.

Saludos!

abril 13, 2016 | Registered Commenterangelns