Каква е разликата между абстрактния клас и интерфейса в Java?



Тази статия ще ви помогне да разберете ключовата разлика между абстрактния клас и интерфейса в Java с помощта на примерна програма.

Абстрактните класове и интерфейси са двата основни градивни елементаот . Въпреки че и двете се използват предимно за абстракция, те са много различни един от друг и не могат да се използват взаимозаменяемо. В тази статия нека разберем каква е разликата между абстрактния клас и интерфейса в Java.

Темите, обсъдени в тази статия, са както следва:





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

Какво представлява абстрактният клас в Java?

На всеки език за програмиране, абстракция означава скриване на неподходящите детайли от потребителя, за да се съсредоточи само върху съществените детайли, за да увеличи ефективността, като по този начин намали сложността. В Java абстракцията се постига с помощта на абстрактни класове . Абстрактният клас улавя общи характеристики на подкласовете и може да съдържа или да не съдържа абстрактни методи. Той не може да бъде инстанциран, но може да се използва само като суперклас от неговите подкласове. Ето примерна програма, демонстрираща абстрактен клас:



Забележка: An абстрактен метод , е метод, който не е приложен на място и добавянепълнота до клас .

пакет MyPackage // абстрактен клас абстрактен клас Animal {String AnimalName = '' Animal (Име на низа) {this.AnimalName = name} // декларира не абстрактни методи // има изпълнение по подразбиране public void BasicInfo (Подробности за низа) {Система. out.println (this.AnimalName + '' + детайли)} // абстрактни методи, които ще бъдат // приложени от неговия подклас (и) абстрактно публично празно местообитание () абстрактно обществено пусто дишане ()} клас Наземен разширява Animal {// конструктор Terrestrial (String name) {super (name)} @Override public void habitat () {System.out.println ('leave on land and')} @Override public void respiration () {System.out.println ('respire през белите дробове или трахеята. ')}} клас Aquatic разширява Animal {// конструктор Aquatic (Име на низ) {super (име)} @Override обществено пусто местообитание () {System.out.println (' Оставя във вода и ') } @Override публично дишане на празнота () {System.out.println ('издишване през хрилете или кожата им.')}} Class AbstractClassDemo {public static voi d main (String [] args) {// създаване на обект на наземен клас // и използване на справка за клас Animal. Animal object1 = new Terrestrial ('Humans') object1.BasicInfo ('are therestrestities, they') object1.habitat () object1.respiration () System.out.println ('') // създаване на обекти от клас кръг Animal object2 = new Aquatic ('Fishes') object2.BasicInfo ('са водни същества, те') object2.habitat () object2.respiration ()}}

Изход

Хората са земни същества, те напускат сушата и дишат през белите дробове или трахеята. Рибите са водни същества, те оставят във вода и дишат през хрилете или кожата им.

The Основна информация () е метод, споделен от Наземен и Водни класове. От Клас животни не може да бъде инициирано, ние създаваме обектите на Наземен и Водни класове с цел програмиране. След това имаме интерфейси.



Интерфейс в Java

Друг начин за постигане абстракция в Java е с помощта на интерфейси .Интерфейсът е колекция от абстрактни методи, той не съдържа конкретни , за разлика от абстрактния клас. Но за разлика от абстрактния клас, интерфейсът осигурява пълна абстракция в Java. Той може да има както методи, така и променливи, точно като клас. Методите, декларирани в интерфейс, обаче са абстрактни по подразбиране.Ето един демонстриращ абстрактен клас:

провал бързо срещу отказ безопасно
пакет MyPackage интерфейс Животни {// абстрактни методи void habitat () void respiration ()} class TerrestrialA реализира Animals {String AnimalName = '' // constructor TerrestrialA (String name) {this.AnimalName = name} @Override public void habitat () {System.out.println (this.AnimalName + 'отпуск на сушата и')} @Override обществено дишане празно () {System.out.println ('издишване през белите дробове или трахеята.')}} Клас AquaticA прилага Животни {String AnimalName = '' // конструктор AquaticA (Име на низ) {this.AnimalName = name} @Override public void habitat () {System.out.println (this.AnimalName + 'leave in water and')} @Override обществено пусто дишане () {System.out.println ('издишване през хрилете или кожата им.')}} Клас JavaInterfaceDemo {public static void main (String [] args) {// създаване на обект на наземен клас // и използване на справка за клас Animal . Animals object1 = new TerrestrialA ('Humans') object1.habitat () object1.respiration () System.out.println ('') // създаване на обекти от клас на кръг Animals object2 = new AquaticA ('Fishes') object2.habitat () object2.respiration ()}}

Изход

Хората напускат сушата и дишат през белите дробове или трахеята. Рибите остават във вода и дишат през хрилете или кожата им.

Ако нямате общ код между вашия класове , тогава можете да изберете интерфейса. Интерфейсът е по-скоро като план на клас, тъй като няма никакви абстрактни методи.

От горното съдържание може би сте забелязали ключовата разлика между абстрактния клас и интерфейса в . Което е, за разлика от абстрактния клас, интерфейсът предоставя пълен абстракция в Java. Сега да продължим и да изброим други разлики.

Абстрактен клас срещу интерфейс

Таблицата по-долу изброява основните разлики между абстрактния клас и интерфейса.

Параметър Абстрактен клас Интерфейс

Изпълнение на метода по подразбиране

Може да има прилагане на метод по подразбиране

Интерфейсите осигуряват чиста абстракция и изобщо не могат да имат изпълнение

Променливи

Може да съдържа нефинални променливи.

Променливите, декларирани в интерфейс, по подразбиране са окончателни

Използвана ключова дума

Абстрактен клас може да бъде разширен с помощта на ключовата дума „extends

Интерфейсът трябва да бъде реализиран с помощта на ключови думи

Модификатори на достъпа

Могаимат публичен, защитен, частен и модификатор по подразбиране

Методите за интерфейс са по подразбиране публични. не можете да използвате друг модификатор за достъп с него

Скорост на изпълнение

Той е по-бърз от интерфейса

Интерфейсът е малко по-бавен и изисква допълнително индирекция

отидете в c ++

Нормален клас

Той може да разшири само един абстрактен клас

Може да реализира множество интерфейси

Конструктори

Абстрактният клас може да има конструктори

Интерфейсът не може да има конструктори

Множествено наследяване

Абстрактният клас може да разшири друг клас и може да реализира множество Java интерфейси

Интерфейсът може да разшири само друг интерфейс на Java

Е, сега вие сте ключовите разлики между абстрактния клас и интерфейса в Java. Но как решавате кога да използвате кой от тези два?

Кога да използвам абстрактния клас и кога да използвам интерфейса?

Помислете за използването на абстрактни класове в следните случаи:

  • Ако имате някои свързани класове, които трябва да споделят същите редове код
  • Когато искате да дефинирате нестатични или нефинални полета
  • Когато имаметоди или полетаили изискват модификатори за достъп различни от публични (като защитени и частни)

Помислете за използването на интерфейси в следните случаи:

  • Когато искате да постигнете чиста абстракция
  • Ако искате да работите многократни , т.е.внедри повече от един интерфейс
  • Когато искате да посочите поведението на определен тип данни, но не сте загрижени за това кой прилага неговото поведение.

Това ни води до края на тази статия. Покрих един от най-често задаваните въпроси за Java в Interview, който е разликата между абстрактния клас и интерфейса в Java.

Уверете се, че практикувате възможно най-много и връщате опита си.

Вижте от Edureka, доверена компания за онлайн обучение с мрежа от над 250 000 доволни учащи, разпространени по целия свят. Ние сме тук, за да ви помогнем във всяка стъпка по вашето пътуване, за да станете освен тези въпроси за интервю за Java, измислим учебна програма, предназначена за студенти и професионалисти, които искат да бъдат Java Developer.

Имате въпрос към нас? Моля, споменете го в раздела за коментари на този „интерфейс на java map“ статия и ние ще се свържем с вас възможно най-скоро.