Hola, buenas a todos.
Queria saber si me pueden explicar cuando es necesario aplicar una interface y cuando no, estuve haciendo unos ejercicios, pero lo mismo que hago en la interface lo puedo hacer en una clase padre, por ejemplo:
Tengo una clase abstracta Vehiculo, donde agrego todos los atributos de un vehiculo en general:
Código Java:
Ver originalpublic abstract class Vehicle implements NewInterface{
protected double value;
protected int capacity;
protected int status;
public Vehicle(){
this.patent = "Default";
this.brand = "Default";
this.model = "Default";
this.color = "Default";
this.capacity = 4;
this.status = 0;
this.value = 0.00;
}
public Vehicle
(String patent
){ this.patent = patent;
this.brand = "Default";
this.model = "Default";
this.color = "Default";
this.capacity = 4;
this.status = 0;
this.value = 0.00;
}
this.patent = patent;
this.brand = brand;
this.model = model;
this.color = color;
this.capacity = capacity;
this.status = 0;
this.value = value;
}
// Setters y Getters
[...]
}
Ahora, a partir de esta clase podría tener la clase auto:
Código Java:
Ver originalpublic class Car extends Vehicle implements NewInterface{
public Car() {
super();
}
super(patent);
}
super(patent, brand, model, color, value, capacity);
}
@Override
return "arrancamos el auto";
}
}
y la interface donde declaro las acciones que pueden realizar los vehiculos, por ejemplo, prenderlo:
Pero yo tambien podria evitarme el hecho de crear la interface, y crear un método abstracto en la clase Vehicle que se llama turnOn y hacer la implementación de ese método en cada clase hija y el resultado es el mismo. Entonces, cuando hay que crear una clase y cuando una interface ? aun no entiendo eso
Para ver si el resultado de crear una interface o crear un metodo abstracto en la clase padre era el mismo, me cree una clase stock, donde al alquilar un auto lo prendo:
Código Java:
Ver originalpublic final class Stock {
private static Stock stock;
private List<Vehicle> vehicles = new ArrayList<Vehicle>();
private Stock(){}
public static Stock newInstance(){
if(stock == null){
stock = new Stock();
}
return stock;
}
public boolean rentVehicle
(String patent
){ Vehicle vehicle = validateExistence(patent);
if(vehicle != null){
vehicle.setStatus(1);
// ACA LA SALIDA POR CONSOLA ES LA MISMA, SEA QUE IMPLEMENTE UNA INTERFACE O UN METODO ABSTRACTO
System.
err.
print(vehicle.
turnOn()); return true;
}
return false;
}
}
y efectivamente la salida por consola era "arrancamos el auto" ya sea que implemente una interface o un método abstracto en la clase padre. Quizás la pregunta es muy tonta pero en verdad no entiendo porque o cuando usar uno u otro, alguno me podria dar una mano ?