java interface abstract class tutorial with examples
Овај видео водич објашњава шта је Јава интерфејс, како га применити и вишеструко наслеђивање помоћу интерфејса у Јави са примерима:
У једном од наших ранијих водича детаљно смо разговарали о апстракцији. Тамо смо разговарали о апстрактним часовима и апстрактним методама. Знамо да апстрактне класе пружају апстракцију, јер у апстрактној класи такође можемо имати неку неастрактну методу.
Функција која омогућава 100% апстракцију на Јави назива се „ Интерфејс ”. У овом упутству ћемо разговарати интерфејси у Јави.
=> Овде погледајте водич за почетнике Јава.
Шта ћете научити:
- Видео водичи о интерфејсима и апстрактним часовима
- Шта је интерфејс у Јави
- Вишеструки интерфејси у Јави
- Закључак
Видео водичи о интерфејсима и апстрактним часовима
Увод у интерфејсе и класе сажетака у Јави - 1. део:
Преглед интерфејса и класа сажетака у Јави - 2. део:
Апстракција и наслеђивање у Јави:
Шта је интерфејс у Јави
Интерфејс у Јави дефинисан је као апстрактни тип који специфицира понашање класе. Интерфејс је врста протокола који поставља правила која се односе на то како одређена класа треба да се понаша.
Интерфејс у Јави може садржати апстрактне методе и статичке константе. Подразумевано су све методе у интерфејсу јавне и апстрактне.
Једноставан пример интерфејса у Јави дат је у наставку.
interface shape{ public static final String color = “Red”; public void calculateArea(); }
Горњи пример дефинише интерфејс ‘облик’ који има статичку променљиву и апстрактну методу ‘израчунајАреа ()’.
Интерфејс је ентитет који као тело има само апстрактне методе. Такође може имати статичке завршне променљиве у себи.
Дакле, баш као и класа, интерфејс такође може имати методе и променљиве, али имајте на уму да су методе апстрактне (без имплементације), а променљиве су статичне.
У наставку су наведена нека својства која треба имати на уму у вези са интерфејсима:
- Интерфејси су нацрти класе. Кажу одељењу шта треба да раде кроз њихове методе.
- Интерфејс специфицира апстрактне методе и класе које имплементирају тај интерфејс такође треба да примене те методе.
- Ако класа која имплементира интерфејс не дефинише све методе интерфејса, тада та класа постаје апстрактна класа.
Општа синтакса декларације интерфејса дата је у наставку.
interface { //constant or static fields declaration //abstract method declaration //default declarations }
Као што је приказано у горњој декларацији, користимо Јава кључну реч „интерфејс“ која указује на то да сада декларишемо интерфејс.
која је разлика између осигурања квалитета и контроле квалитета
Кључну реч „интерфејс“ прати назив „интерфејс“, а затим почетне коврџаве заграде. Затим имамо разне декларације апстрактних метода, декларације статичких поља итд. Коначно, затварамо витичасте заграде.
На пример,ако желимо да прогласимо интерфејс „ТестИнтерфаце“ са две методе у њему, тј. метход_оне и метход_тво, тада ће декларација ТестИнтерфаце бити следећа:
interface TestInterface{ void method_one(); void method_two(); }
Употреба интерфејса у Јави
- Интерфејси у Јави пружају 100% апстракцију, јер могу имати само апстрактне методе.
- Коришћењем интерфејса можемо постићи више наслеђа у Јави, што није могуће коришћењем класа.
- Да би се постигла лабава спрега, може се користити интерфејс.
Како имплементирати интерфејс у Јави
Једном када је интерфејс декларисан, можемо га користити у класи користећи кључну реч „имплементира“ у декларацији класе.
Ова кључна реч ‘имплементс’ појављује се након назива класе, као што је приказано доле:
class implements { //class body }
Имплементација интерфејса је исто што и потписивање уговора. Отуда класа која имплементира интерфејс значи да је потписала уговор и пристала да примени апстрактне методе интерфејса или другим речима извршава понашање одређено интерфејсом.
Ако класа која имплементира интерфејс не примењује тачно понашање наведено у интерфејсу, тада класу треба прогласити апстрактном.
Пример примене интерфејса
Доље је дат једноставан пример интерфејса у Јави.
//interface declaration interface Polygon_Shape { void calculateArea(int length, int breadth); } //implement the interface class Rectangle implements Polygon_Shape { //implement the interface method public void calculateArea(int length, int breadth) { System.out.println('The area of the rectangle is ' + (length * breadth)); } } class Main { public static void main(String() args) { Rectangle rect = new Rectangle(); //declare a class object rect.calculateArea(10, 20); //call the method } }
Излаз:
Горњи програм показује једноставан пример интерфејса у Јави. Овде декларишемо интерфејс назван Полигон_Схапе и онда га класа Рецтангле примењује.
Конвенција о именовању интерфејса у Јави
Конвенције о именовању Јава су смернице за именовање којих се морамо придржавати као програмери како бисмо могли произвести читљив доследан код. Јава користи ознаке „ТитлеЦасе“ за класе именовања и интерфејсе. Користи ознаке „ЦамелЦасе“ за променљиве, методе итд.
Што се интерфејса тиче, назив интерфејса налази се у наслову с великим словом прво слово сваке речи имена интерфејса. Имена интерфејса су одабрана тако да су обично придеви. Али када интерфејси представљају породицу класа попут мапе или листе, тада могу бити именовани по именицама.
У наставку су дати неки примери важећих назива интерфејса:
public interface Iterable {} public interface List {} public interface Serializable {} public interface Clonable {} public interface Runnable {}
Конструктор интерфејса
Следеће питање је да ли интерфејс има конструктор?
Знамо да су нам потребни објекти за позивање метода. За стварање објеката потребни су нам конструктори. Али у случају Интерфејса у Јави, методе се не примењују.
Све методе интерфејса су апстрактне. Стога нема користи од позивања ових метода са интерфејса. Друго, како су интерфејси подразумевано апстрактни, не можемо да креирамо објекте интерфејса. Стога нам нису потребни конструктори за Интерфаце.
Методе интерфејса
У овом одељку ћемо размотрити како се декларишу методе интерфејса. По правилу, интерфејс може имати само јавне методе или су подразумевано јавне методе. Ниједан други модификатор приступа није дозвољено користити унутар интерфејса.
Дакле, без обзира да ли то експлицитно изјављујемо или не, свака метода у интерфејсу је подразумевано апстрактна и има јавну видљивост.
Дакле, ако је воид принтМетход () прототип који намеравамо да пријавимо у интерфејсу, онда су следеће декларације исте.
void printMethod(); public void printMethod(); abstract void printMethod (); public abstract void printMethod ();
Имајте на уму да не можемо да користимо следеће модификаторе унутар интерфејса за методе интерфејса.
- коначни
- статички
- Приватни
- заштићен
- синхронизовано
- домородац
- стрицтфп
Сада ћемо применити Јава програм за демонстрацију видљивости методе интерфејса.
//declare an interface interface TestInterface { void printMethod(); //default visibility is public. } //interface implementation class TestClass implements TestInterface { //if the access modifier is changed to any other, compiler generates error public void printMethod() { System.out.println('TestClass::printMethod()'); } } class Main { public static void main(String() args) { TestClass tc = new TestClass(); //create an object tc.printMethod(); //call concrete method } }
Излаз:
Као што је већ поменуто, методе интерфејса су подразумевано јавне. Стога, када за метод интерфејса не одредимо ниједан модификатор приступа, он је јаван као у горњем програму.
Претпоставимо да променимо декларацију методе интерфејса у горе наведеном програму на следећи начин:
привате воид принтМетход ();
Тада то значи да смо метод интерфејса принтМетход () одредили као приватни. Када компајлирамо програм, добијамо следећу грешку компајлера.
грешка: приватни модификатор овде није дозвољен
привате воид принтМетход ();
Други случај који можемо тестирати је промена модификатора имплементиране методе у класи ТестЦласс из јавног у приватни. Сада је подразумевани модификатор у класи приватан. Дакле, само уклањамо јавну кључну реч из прототипа методе у класи на следећи начин:
void printMethod() { System.out.println('TestClass::printMethod()'); }
Ако компајлирамо програм, добићемо следећу грешку.
грешка: принтМетход () у ТестЦласс не може имплементирати принтМетход () у ТестИнтерфаце
воид принтМетход ()
^
покушај додељивања слабијих привилегија приступа; била јавна
Отуда је поента коју овде треба напоменути да не можемо променити модификатор приступа примењене методе интерфејса у било који други модификатор приступа. Како су методе интерфејса подразумевано јавне, када их примењују класе које примењују интерфејсе, ове методе такође треба да буду јавне.
Поља интерфејса у Јави
Поља или променљиве декларисане у интерфејсу су подразумевано јавне, статичке и коначне. То значи да се једном проглашене вредности не могу мењати.
Имајте на уму да ако су поља интерфејса дефинисана без навођења било ког од ових модификатора, Јава компајлери претпостављају ове модификаторе. На пример, ако не одредимо јавни модификатор приликом декларисања поља у интерфејсу, онда се подразумевано претпоставља.
Када класу имплементира интерфејс, он пружа имплементацију за све апстрактне методе интерфејса. Слично томе, сва поља декларисана у интерфејсу такође наслеђује класа која имплементира интерфејс. Тако је копија поља интерфејса присутна у класи примене.
Сада су сва поља у интерфејсу подразумевано статична. Отуда им можемо приступити тако што ћемо директно користити име интерфејса исто као што приступамо статичким пољима класе користећи име класе, а не објекта.
Пример Јава програма у наставку показује како можемо приступити пољима интерфејса.
//interface declaration interface TestInterface{ public static int value = 100; //interface field public void display(); } //Interface implementation class TestClass implements TestInterface{ public static int value = 5000; //class fields public void display() { System.out.println('TestClass::display () method'); } public void show() { System.out.println('TestClass::show () method'); } } public class Main{ public static void main(String args()) { TestClass testObj = new TestClass(); //print interface and class field values. System.out.println('Value of the interface variable (value): '+TestInterface.value); System.out.println('Value of the class variable (value): '+testObj.value); } }
Излаз:
Као што је приказано у горњем програму, пољима интерфејса се може приступити помоћу имена интерфејса иза којег следи тачкасти оператор (.), А затим стварног имена променљиве или поља.
Генерички интерфејс у Јави
Разговарали смо о генеричким програмима Јава у нашим ранијим водичима. Осим што имамо генеричке класе, методе итд., Можемо имати и генеричке интерфејсе. Генерички интерфејси се могу на сличан начин одредити на начин на који специфицирамо генеричке класе.
Генерички интерфејси се декларишу са параметрима типа који их чине независним од типа података.
Општа синтакса генеричког интерфејса је следећа:
како направити нову листу у јави
interface { //interface methods and variables }
Сада ако желимо да користимо горњи генерички интерфејс у класи, онда можемо дефиниција класе као што је приказано доле:
class implements interface_name { //class body }
Имајте на уму да морамо да наведемо исти парам-лист са класом као и са интерфејсом.
Следећи Јава програм демонстрира генерички интерфејс у Јави.
//generic interface declaration interface MinInterface>{ T minValue(); } //implementation for generic interface class MinClassImpl> implements MinInterface { T() intArray; MinClassImpl(T() o) { intArray = o; } public T minValue() { T v = intArray(0); for (int i = 1; i intMinValue = new MinClassImpl (intArray); MinClassImpl charMinValue = new MinClassImpl(charArray); //call interface method minValue for int type array System.out.println('Min value in intOfArray: ' + intMinValue.minValue()); //call interface method minValue for char type array System.out.println('Min value in charOfArray: ' + charMinValue.minValue()); }
Излаз:
Горњи програм имплементира интерфејс који садржи методу за проналажење минималне вредности у низу. Ово је генерички интерфејс. Класа примењује овај интерфејс и замењује метод. У главној методи позивамо методу интерфејса да бисмо пронашли минималну вредност у целом броју и низу знакова.
Вишеструки интерфејси у Јави
У нашој теми о наслеђивању видели смо да Јава не дозвољава класи наслеђивање из више класа јер резултира нејасноћом која се назива „Дијамантски проблем“.
Међутим, класа може наследити или применити више интерфејса. У овом случају је познато као вишеструко наслеђивање. Дакле, иако нам није дозвољено да имплементирамо вишеструко наслеђивање у Јави кроз класе, то можемо учинити помоћу интерфејса.
Следећи дијаграм приказује вишеструко наслеђивање помоћу интерфејса. Овде класа имплементира два интерфејса, тј. Интерфаце_оне и Интерфаце_тво.
Имајте на уму да када класа имплементира више интерфејса, имена интерфејса су одвојена зарезом у декларацији класе. Можемо применити онолико интерфејса докле год можемо да се носимо са сложеношћу.
Јава програм који приказује више интерфејса приказан је у наставку.
//Interface_One declaration interface Interface_One{ void print(); } //Interface_Two declaration interface Interface_Two{ void show(); } //multiple inheritance - DemoClass implementing Interface_One&Interface_Two class DemoClass implements Interface_One,Interface_Two{ public void print(){ //Override Interface_One print() System.out.println('Democlass::Interface_One_Print ()'); } public void show(){ //Override Interface_Two show() System.out.println('DemoClass::Interface_Two_Show ()'); } } public class Main{ public static void main(String args()){ DemoClass obj = new DemoClass(); //create DemoClass object and call methods obj.print(); obj.show(); } }
Излаз:
јава уклони елемент из низа
Као што је горе приказано, имплементирамо два интерфејса. Тада надјачавамо њихове одговарајуће методе и позивамо их у главни метод.
Вишеструко наслеђивање у Јави пружа све предности које вишеструко наслеђивање пружа у Ц ++. Али за разлику од вишеструког наслеђивања помоћу класа, вишеструко наслеђивање помоћу интерфејса је без икаквих двосмислености.
Наслеђивање интерфејса у Јави: Интерфејс проширује интерфејс
Када класа имплементира интерфејс, то се ради помоћу „ спроводи ’Кључна реч. У Јави интерфејс може наследити други интерфејс. Ово се ради помоћу „ продужава ’Кључна реч. Када интерфејс прошири други интерфејс, то се назива „ Наслеђивање интерфејса ”На Јави.
Јава програм за примену наслеђивања интерфејса приказан је у наставку.
//Interface_One declaration interface Interface_One{ void print(); } //Interface_Two declaration; inherits from Interface_One interface Interface_Two extends Interface_One{ void show(); } //multiple inheritance - DemoClass implementing Interface_Two class DemoClass implements Interface_Two{ public void print(){ //Override Interface_Two print() System.out.println('Democlass public class Main{ public static void main(String args()){ DemoClass obj = new DemoClass(); //create DemoClass object and call methods obj.print(); obj.show(); } }
Излаз:
Модификовали смо исти програм који смо користили за вишеструко наслеђивање користећи интерфејсе да бисмо демонстрирали наслеђивање интерфејса. Овде проширујемо Интерфаце_оне у Интерфаце_тво, а затим крећемо у примену Интерфаце_тво у класи. Како се интерфејси наслеђују, обе методе су доступне за поништавање.
Често постављана питања
П # 1) Каква је употреба интерфејса у Јави?
Одговор: Интерфејс у Јави је ентитет који се користи за постизање 100% апстракције. Може садржати само апстрактне методе које класа која примењује интерфејс може надјачати.
Интерфејс на неки начин делује као нацрт класе у којој класи даје апстрактне прототипове метода и статичке константе, а затим класа мора надјачати те методе применом интерфејса.
П # 2) Које су предности интерфејса у Јави?
Одговор: Неке од предности интерфејса су следеће:
- Интерфејс делује као нацрт класе.
- Интерфејс пружа 100% апстракцију на Јави, јер има све апстрактне методе.
- Интерфејси се могу користити за постизање вишеструког наслеђивања у Јави. Јава не дозвољава наслеђивање из више класа, али класа може да имплементира више интерфејса.
# 3) Може ли интерфејс имати методе?
Одговор: Интерфејси могу имати прототипове метода и статичке и коначне константе. Али почевши од Јаве 8, интерфејси могу садржати статичке и подразумеване методе.
П # 4) Можемо ли прогласити интерфејс коначним?
Одговор: Не. Ако прогласимо интерфејс коначним, тада класа неће моћи да га примени. Без примене било које класе, интерфејс неће имати никакву сврху.
Више о интерфејсима
Интерфејси су нацрти попут класе, али имат ће само декларацију методе. Неће имати начин примене. Све методе у интерфејсу су подразумевано јавне апстрактне. Јава 1.8 интерфејс може имати статичке и подразумеване методе.
Интерфејси се углавном користе у АПИ-има.
На пример: Узмите у обзир да дизајнирате мотор возила.
Када завршите са хардверским делом, желите да неке софтверске функционалности имплементира клијент који користи ваш мотор. Дакле, у том случају можете да дефинишете своје функције мотора у интерфејсу.
Interface Engine { void changeGear(int a); void speedUp(int a); }
Правила која треба поштовати за интерфејс
- Класа која имплементира интерфејс треба да имплементира све методе у интерфејсу.
- Интерфејс може садржати коначне променљиве.
public class Vehicle implements Engine { int speed; int gear; @Override public void speedUp(int a) { this.speed=a; System.out.println('speed'+speed); } @Override public void changeGear(int a) { this.gear=a; System.out.println('gear'+gear); } public static void main(String() args) { // TODO Auto-generated method stub Vehicle objv=new Vehicle(); objv.changeGear(3); objv.speedUp(70); } }
Овде је класа Вехицле подкласа која примењује интерфејс мотора.
Шта су часови сажетака?
Апстрактна класа је попут класе, али она ће имати апстрактне методе и конкретне методе. Апстрактне методе немају примену. Имаће само декларацију методе.
Правила која треба поштовати за час сажетка
- Апстрактна класа не може бити инстанцирана.
- Цхилд класа која проширује апстрактну класу треба да примени све апстрактне методе родитељске класе или Цхилд класа треба да буде декларисана као апстрактна класа.
Када желите да осмислите делимичну примену, можете ићи на апстрактни час.
Пример апстрактног програма класе:
ЕмплоиееДетаилс.јава
public abstract class EmployeeDetails { private String name; private int emp_ID; public void commonEmpDetaills() { System.out.println('Name'+name); System.out.println('emp_ID'+emp_ID); } public abstract void confidentialDetails(int s,String p); }
Класа која ће продужити апстрактну класу.
ХР.јава
public class HR extends EmployeeDetails { private int salary; private String performance; @Override public void confidentialDetails(int s,String p) { this.salary=s; this.performance=p; System.out.println('salary=='+salary); System.out.println('performance=='+performance); } public static void main(String() args) { HR hr =new HR(); hr.confidentialDetails(5000,'good'); } }
Кључне тачке које треба напоменути:
- У интерфејсима, све методе неће имати имплементацију методе.
- Класа која имплементира интерфејс треба да имплементира све методе у том одређеном интерфејсу.
- Апстрактне класе могу имати апстрактне методе као и нормалне конкретне методе. Апстрактне методе немају примену.
- Класа која продужава апстрактну класу требало би да има примену за све апстрактне методе у апстрактној класи.
- Ако поткласа нема довољно информација за примену апстрактних метода, тада би подкласа требало да буде декларисана као апстрактна класа.
Закључак
У овом упутству представили смо основне концепте интерфејса у Јави. Разговарали смо о дефиницији интерфејса, заједно са потребом за интерфејсима. Истражили смо њихову основну синтаксу и дефиницију. Затим смо разговарали о томе како да користимо интерфејсе за које користимо кључну реч ‘имплементс’.
Научили смо како да користимо више интерфејса и наслеђивање интерфејса у Јави. Коришћењем више интерфејса можемо имплементирати вишеструко наслеђивање у Јави. Наслеђивање интерфејса је када један интерфејс проширује други интерфејс.
=> Посетите овде да бисте видели серију Јава обуке за све
Препоручено читање
- ООП Јава: Увод у објектно оријентисано програмирање на Јави
- Упоредни и упоредни интерфејси у Јави
- Побољшања интерфејса у Јави 8 - Јава функционални интерфејс
- Водич за интерфејс Јава Мап са применом и примерима
- ЛистИтератор сучеље у Јави са примерима
- Маркер интерфејс у Јави: серијски и клониран
- Постављање интерфејса у Јави: Водич за постављање Јава-а са примерима
- Водич за Јава рефлексију са примерима