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 original- public 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 original- public 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 original- public 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 ?