2010-09-13 3 views
3

Можно создать дубликат:
Interface vs Abstract Class (general OO)В чем разница между абстрактным классом и интерфейсом?

Могу ли я когда-либо создать экземпляр абстрактного класса? Если да, почему бы мне не сделать абстрагирование всех моих незапечатанных классов?

Если я не могу создать экземпляр, то в чем отличие от интерфейса? Может ли абстрактный класс иметь «базовый» класс? Есть ли разница в различии между интерфейсом и абстрактным классом?

+3

** Люди это мега-дубликат. Не отвечайте. Он будет закрыт и удален. ** –

+0

@John Saunders - Извините за дубликат. Хотя это может показаться не таким, я действительно искал вопрос, который имел это перед публикацией (я нашел несколько близких, но не выше). Во всяком случае, я плохой. В следующий раз я попытаюсь найти труднее. – Vaccano

+0

это не было против вас. Это было направлено на тех, кто так быстро ответил на этот вопрос, не понимая, что это должен быть дубликат. –

ответ

0

С одной стороны: вы можете наследовать только один абстрактный класс. У вас может быть несколько интерфейсов, подключенных к классу.

1

Вы не можете напрямую создать экземпляр абстрактного класса. Однако вы можете предоставить методы и/или реализации свойств, которые вы не можете сделать в интерфейсе. Также вы можете наследовать только один класс, абстрактный или иначе, тогда как вы можете наследовать (реализовывать) столько интерфейсов, сколько хотите.

abstract class A 
{ 
    public int Foo() { return 1; } // implementation defined 
} 

class B : A 
{ 
} 

interface C 
{ 
    int Foo() {return 1;} // not legal, cannot provide implementation in interface 
} 

// ... somewhere else in code 

A a = new A(); // not legal 
A a = new B(); // legal 
4

Интерфейсы не обеспечивают реализацию. Вы также можете реализовать несколько интерфейсов.

Вы можете обеспечить реализацию внутри абстрактного класса, но вы можете наследовать только один базовый тип.

В любом случае вы не можете напрямую создать экземпляр одного из них.

1

Аннотация Класс:

  1. Аннотация класс может содержать абстрактные методы и нефизических абстрактные методы.

  2. Когда неабстрактный класс наследуются от абстрактного класса , не-абстрактный класс должен обеспечить все реализаций для унаследованного абстрактного метода.

Интерфейс:

  1. интерфейс не что иное, как чисто абстрактного класса, т.е. интерфейс может содержать только объявление функции.

  2. Все члены интерфейса являются общедоступными по умолчанию , и вы не можете предоставить какие-либо модификаторы доступа.

  3. Когда класс наследуется от интерфейса, унаследованный класс должен предоставлять фактические реализации для унаследованных членов.

0

Интерфейс определяет договор, в котором говорится о том, что вы будете использовать имплитутивы определенного набора сигнатур методов.

Абстрактный класс означает, что вы не можете напрямую создать его новый экземпляр, чтобы использовать любые другие функции класса, т. Е. Свойства.

7

Вы не можете создать экземпляр абстрактного класса.

Разница между абстрактным классом и интерфейсом заключается в том, что абстрактный класс может иметь стандартную реализацию методов, поэтому, если вы не переопределяете их в производном классе, используется реализация абстрактного базового класса. Интерфейсы не могут быть реализованы.

Смежные вопросы