Посмотрите на это.
Цитата: (Очень хорошее объяснение от e-sat)
Интерфейс
Интерфейс - это контракт: парень, пишущий интерфейс, говорит: «Эй, я принимаю вещи, выглядящие так», а парень, использующий интерфейс, говорит: «Хорошо, класс, который я пишу, выглядит так».
И интерфейс - это пустая оболочка , есть только сигнатуры (имя / параметры / возвращаемый тип) методов. Методы не содержат ничего. Интерфейс не может ничего сделать. Это просто шаблон.
E.G (псевдокод):
// I say all motor vehicles should look like that :
interface MotorVehicle
{
void run();
int getFuel();
}
// my team mate complies and write vehicle looking that way
class Car implements MotoVehicle
{
int fuel;
void run()
{
print("Wrroooooooom");
}
int getFuel()
{
return this.fuel;
}
}
Реализация интерфейса потребляет очень мало ресурсов ЦП, потому что это не класс, а просто набор имен, и поэтому нет дорогостоящего поиска. Замечательно, когда это важно, например, во встроенных устройствах.
Абстрактные занятия
Абстрактные классы, в отличие от интерфейсов, являются классами. Есть более дорогие в использовании, потому что есть поиск, когда вы наследуете от них.
Абстрактные классы очень похожи на интерфейсы, но у них есть нечто большее: вы можете определить поведение для них. Это больше о парне, который говорит: «Эти классы должны выглядеть так, и у них это общее, так что заполните пробелы!».
например:
// I say all motor vehicles should look like that :
abstract class MotorVehicle
{
int fuel;
// they ALL have fuel, so why let others implement that ?
// let's make it for everybody
int getFuel()
{
return this.fuel;
}
// that can be very different, force them to provide their
// implementation
abstract void run();
}
// my team mate complies and write vehicle looking that way
class Car extends MotorVehicule
{
void run()
{
print("Wrroooooooom");
}
}
По: https://stackoverflow.com/users/9951/e-satis