Аннотация метод используется для наследования, когда Object B
IS Object A
. Интерфейс используется, когда Object B
HAS Object A
. Например, BMW - это АВТОМОБИЛЬ, но CAR не ДВИГАТЕЛЬ, автомобиль имеет ДВИГАТЕЛЬ. Но кроме этого между ними существует лишь несколько технических нюансов. Логика здесь важна.
EDIT: В связи с большим спросом, вот мой пример:
interface Engine {
horsePower(int a);
torque(int a);
volume(int a);
//...
}
автомобилей
abstract class Car implements Engine {
//implement interface methods
public abstract accelerate(int howMuch, int horsePower);
public abstract brake(int howMuch);
public abstract turn(int degreesOfRotation);
//..
}
И BMW
public class BMW extends Car {
private final String carMake = "BMW";
private String carModel;
// implement abstract methods of Car
public void setModel(String s){
carModel = s;
//and so on
}
http://www.javaworld.com/article/2077421/learn-java/abstract-classes-vs-interfaces.html –
Этот вопрос, вероятно, будет отмечен как дубликат через минуту. Большинство дубликатов очень устарели. Когда вы читаете связанные ответы, убедитесь, что вы проверяете, применяются ли они к Java 8, поскольку правила были коренным образом изменены. –
Также уместно: [Использование интерфейсов Java/Абстрактные классы] (http://stackoverflow.com/questions/2869222/use-of-java-interfaces-abstract-classes?rq=1) – resueman