java interface abstract class tutorial with examples
Цей відео-посібник пояснює, що таке інтерфейс Java, як його реалізувати та множинне успадкування за допомогою інтерфейсів у Java, на прикладах:
В одному з наших попередніх підручників ми детально обговорили абстракцію. Там ми обговорили абстрактні класи та абстрактні методи. Ми знаємо, що абстрактні класи забезпечують абстракцію, оскільки ми можемо також мати якийсь абстрактний метод в абстрактному класі.
Функція, яка забезпечує 100% абстракцію в Java, називається “ Інтерфейс '. У цьому підручнику ми обговоримо інтерфейси в Java.
=> Подивіться тут посібник для початківців Java.
Що ви дізнаєтесь:
- Відеоуроки з інтерфейсів та абстрактних класів
- Що таке інтерфейс у Java
- Кілька інтерфейсів в Java
- Висновок
Відеоуроки з інтерфейсів та абстрактних класів
Вступ до інтерфейсів та абстрактних класів на Java - Частина 1:
Огляд інтерфейсів та абстрактних класів на Java - Частина 2:
Абстракція та спадкування на Java:
Що таке інтерфейс у Java
Інтерфейс у Java визначається як абстрактний тип, який визначає поведінку класу. Інтерфейс - це свого роду протокол, який встановлює правила щодо того, як повинен поводитися певний клас.
Інтерфейс у Java може містити абстрактні методи та статичні константи. За замовчуванням усі методи в інтерфейсі є загальнодоступними та абстрактними.
Простий приклад інтерфейсу в Java наведено нижче.
interface shape{ public static final String color = “Red”; public void calculateArea(); }
Наведений вище приклад визначає інтерфейс ‘shape’, який має статичну змінну та абстрактний метод ‘calcuArea ()’.
Інтерфейс - це сутність, яка має своїм тілом лише абстрактні методи. У ньому також можуть бути статичні кінцеві змінні.
Так само, як і клас, інтерфейс також може мати методи та змінні, але зауважте, що методи є абстрактними (без реалізації), а змінні статичними.
Нижче наведено деякі властивості, про які слід пам’ятати, пов’язані з інтерфейсами:
- Інтерфейси - це схеми класу. Вони говорять класу, що робити за допомогою своїх методів.
- Інтерфейс визначає абстрактні методи та класи, що реалізують цей інтерфейс, також повинні реалізовувати ці методи.
- Якщо клас, що реалізує інтерфейс, не визначає всіх методів інтерфейсу, тоді цей клас стає абстрактним класом.
Загальний синтаксис оголошення інтерфейсу наведено нижче.
interface { //constant or static fields declaration //abstract method declaration //default declarations }
Як показано у наведеній вище декларації, ми використовуємо ключове слово Java “інтерфейс”, яке вказує на те, що ми зараз оголошуємо інтерфейс.
конвертувати декілька відео YouTube у mp3
За ключовим словом «інтерфейс» слідує назва_інтерфейсу, а потім відкриваються фігурні дужки. Потім ми маємо різні оголошення абстрактних методів, оголошення статичних полів тощо. Нарешті, ми закриваємо фігурні дужки.
Наприклад,якщо ми хочемо оголосити інтерфейс 'TestInterface' з двома методами, тобто method_one і method_two, тоді оголошення TestInterface буде таким, як показано нижче:
interface TestInterface{ void method_one(); void method_two(); }
Використання інтерфейсу в Java
- Інтерфейси в Java забезпечують 100% абстракцію, оскільки вони можуть мати лише абстрактні методи.
- Використовуючи інтерфейси, ми можемо досягти декількох успадкувань у Java, що неможливо за допомогою класів.
- Для досягнення вільного зчеплення можна використовувати інтерфейс.
Як реалізувати інтерфейс в Java
Після оголошення інтерфейсу ми можемо використовувати його в класі за допомогою ключового слова “implements” у декларації класу.
Це ключове слово ‘implements’ з’являється після назви класу, як показано нижче:
class implements { //class body }
Впровадження інтерфейсу - те саме, що підписання контракту. Отже, клас, що реалізує інтерфейс, означає, що він підписав контракт і погодився на реалізацію абстрактних методів інтерфейсу або іншими словами виконує поведінку, визначену інтерфейсом.
Якщо клас, що реалізує інтерфейс, не реалізує точну поведінку, зазначену в інтерфейсі, тоді клас потрібно оголосити абстрактним.
Приклад реалізації інтерфейсу
Нижче наведено простий приклад інтерфейсу в Java.
//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 } }
Вихід:
Наведена програма демонструє простий приклад інтерфейсів у Java. Тут ми оголошуємо інтерфейс з іменем Polygon_Shape, а потім клас Rectangle реалізує його.
Конвенція про іменування інтерфейсів на Java
Конвенції щодо імен Java - це настанови щодо іменування, яких ми повинні дотримуватися як програмісти, щоб ми могли створити читабельний послідовний код. Java використовує позначення “TitleCase” для класів іменування та інтерфейсів. Він використовує позначення “CamelCase” для змінних, методів тощо.
Що стосується інтерфейсу, то назва інтерфейсу стоїть у заголовку з першою літерою кожного слова імені інтерфейсу з великої літери. Назви інтерфейсу підбираються так, що вони, як правило, є прикметниками. Але коли інтерфейси представляють сімейство класів, таких як map або list, тоді їх можна назвати іменами.
Нижче наведено кілька прикладів дійсних назв інтерфейсів:
public interface Iterable {} public interface List {} public interface Serializable {} public interface Clonable {} public interface Runnable {}
Конструктор інтерфейсу
Наступне питання - чи має інтерфейс конструктор?
Ми знаємо, що нам потрібні об’єкти для виклику методів. Для створення об'єктів нам потрібні конструктори. Але у випадку з інтерфейсами на Java методи не реалізовані.
Всі методи інтерфейсів є абстрактними. Отже, немає сенсу викликати ці методи з інтерфейсу. По-друге, оскільки інтерфейси за замовчуванням абстрактні, ми не можемо створювати об'єкти інтерфейсу. Таким чином, нам не потрібні конструктори для інтерфейсу.
Методи інтерфейсу
У цьому розділі ми обговоримо, як оголосити методи інтерфейсу. Як правило, інтерфейс може мати лише загальнодоступні методи, або за замовчуванням методи інтерфейсу є загальнодоступними. Жоден інший модифікатор доступу не можна використовувати всередині інтерфейсу.
Тож незалежно від того, заявляємо ми це чи ні, кожен метод в інтерфейсі за замовчуванням є абстрактним із загальнодоступною видимістю.
Отже, якщо void printMethod () є прототипом, який ми маємо намір оголосити в інтерфейсі, то наступні оголошення однакові.
void printMethod(); public void printMethod(); abstract void printMethod (); public abstract void printMethod ();
Зверніть увагу, що ми не можемо використовувати наступні модифікатори всередині інтерфейсу для інтерфейсних методів.
- остаточний
- статичний
- Приватна
- захищений
- синхронізовані
- рідний
- Strogifp
Тепер давайте реалізуємо програму Java, щоб продемонструвати видимість методу інтерфейсу.
//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 } }
Вихід:
Як уже зазначалося, за замовчуванням методи інтерфейсу є загальнодоступними. Отже, коли ми не вказуємо будь-який модифікатор доступу для методу інтерфейсу, тоді він є загальнодоступним, як у вищезазначеній програмі.
Припустимо, ми змінимо декларацію методу інтерфейсу у наведеній вище програмі таким чином:
private void printMethod ();
Тоді це означає, що ми вказали метод інтерфейсу printMethod () як приватний. Коли ми компілюємо програму, ми отримуємо таку помилку компілятора.
помилка: модифікатор приватний тут не дозволений
private void printMethod ();
Другий випадок, який ми можемо перевірити, - це зміна модифікатора реалізованого методу в класі TestClass із загальнодоступного на приватний. Тепер модифікатор за замовчуванням у класі приватний. Отже, ми просто видаляємо ключове слово public з прототипу методу в класі наступним чином:
void printMethod() { System.out.println('TestClass::printMethod()'); }
Тепер, якщо ми компілюємо програму, ми отримуємо таку помилку.
помилка: printMethod () у TestClass не може реалізувати printMethod () у TestInterface
void printMethod ()
^
спроба призначити слабші привілеї доступу; було публічним
Отже, тут слід зазначити, що ми не можемо змінити модифікатор доступу реалізованого методу інтерфейсу на будь-який інший модифікатор доступу. Оскільки методи інтерфейсу за замовчуванням є загальнодоступними, коли вони реалізуються класами, що реалізують інтерфейси, ці методи також повинні бути загальнодоступними.
Поля інтерфейсу в Java
Поля або змінні, оголошені в інтерфейсі, за замовчуванням є загальнодоступними, статичними та остаточними. Це означає, що після оголошення їх значення не може бути змінено.
Зверніть увагу, що якщо поля інтерфейсу визначені без зазначення будь-якого з цих модифікаторів, то компілятори Java приймають ці модифікатори. Наприклад, якщо ми не вказуємо загальнодоступний модифікатор при оголошенні поля в інтерфейсі, то це передбачається за замовчуванням.
Коли інтерфейс реалізується класом, він забезпечує реалізацію для всіх абстрактних методів інтерфейсу. Подібним чином, усі поля, оголошені в інтерфейсі, також успадковуються класом, який реалізує інтерфейс. Таким чином, копія поля інтерфейсу присутня в класі реалізації.
Тепер усі поля в інтерфейсі за замовчуванням статичні. Отже, ми можемо отримати до них доступ, використовуючи ім’я інтерфейсу безпосередньо так само, як і статичні поля класу, використовуючи ім’я класу, а не об’єкт.
Наведений нижче приклад програми Java показує, як ми можемо отримати доступ до полів інтерфейсу.
//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); } }
Вихід:
Як показано в програмі вище, до полів інтерфейсу можна отримати доступ, використовуючи ім'я інтерфейсу, за яким слід оператор крапок (.), А потім фактичну назву змінної або поля.
Загальний інтерфейс у Java
У наших попередніх підручниках ми обговорювали дженерики Java. Окрім загальних класів, методів тощо, ми можемо мати загальні інтерфейси. Загальні інтерфейси можуть бути вказані аналогічно тому, як ми вказуємо загальні класи.
Загальні інтерфейси оголошуються з параметрами типу, що робить їх незалежними від типу даних.
Загальний синтаксис загального інтерфейсу такий:
як відкрити .swf файли у Windows - -
interface { //interface methods and variables }
Тепер, якщо ми хочемо використовувати вищезазначений загальний інтерфейс у класі, тоді можемо мати визначення класу, як показано нижче:
class implements interface_name { //class body }
Зверніть увагу, що ми повинні вказати той самий параметр-список з класом, що і з інтерфейсом.
Наступна програма Java демонструє загальні інтерфейси в Java.
//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()); }
Вихід:
Вищевказана програма реалізує інтерфейс, що містить метод пошуку мінімального значення в масиві. Це загальний інтерфейс. Клас реалізує цей інтерфейс і замінює метод. У основному методі ми називаємо метод інтерфейсу, щоб знайти мінімальне значення в цілому чисельному масиві та масиві символів.
Кілька інтерфейсів в Java
У нашій темі успадкування ми побачили, що Java не дозволяє класу успадковуватись з декількох класів, оскільки це призводить до неоднозначності, яка називається 'Алмазна проблема'.
Однак клас може успадкувати або реалізувати більше одного інтерфейсу. У цьому випадку це відоме як багаторазове успадкування. Отже, хоча нам заборонено реалізовувати множинне успадкування в Java через класи, ми можемо це робити за допомогою інтерфейсів.
На наступній схемі показано множинне успадкування за допомогою інтерфейсів. Тут клас реалізує два інтерфейси, тобто Interface_one та Interface_two.
Зверніть увагу, що коли клас реалізує кілька інтерфейсів, імена інтерфейсу розділяються комами в оголошенні класу. Ми можемо реалізувати стільки інтерфейсів, скільки ми можемо впоратися зі складністю.
Програма Java, яка демонструє кілька інтерфейсів, показана нижче.
//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(); } }
Вихід:
яка найновіша операційна система
Як показано вище, ми реалізуємо два інтерфейси. Потім ми замінюємо їх відповідні методи і викликаємо їх в основному методі.
Багаторазове успадкування в Java забезпечує всі переваги, які дає багаторазове успадкування в C ++. Але на відміну від багаторазового успадкування за допомогою класів, множинне успадкування за допомогою інтерфейсів відбувається без будь-якої неоднозначності.
Спадщина інтерфейсу в Java: Інтерфейс розширює інтерфейс
Коли клас реалізує інтерфейс, це робиться за допомогою знаряддя праці Ключове слово. У Java інтерфейс може успадкувати інший інтерфейс. Це робиться за допомогою поширюється Ключове слово. Коли інтерфейс розширює інший інтерфейс, це називається “ Успадкування інтерфейсу ”На Java.
Програма Java для реалізації успадкування інтерфейсу показана нижче.
//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(); } }
Вихід:
Ми модифікували ту саму програму, яку використовували для множинного успадкування, використовуючи інтерфейси, щоб продемонструвати успадкування інтерфейсу. Тут ми розширюємо Interface_one в Interface_two, а потім переходимо до реалізації Interface_two в класі. Оскільки інтерфейси успадковуються, обидва методи доступні для заміни.
Часті запитання
Q # 1) Яке використання інтерфейсу в Java?
Відповідь: Інтерфейс в Java - це сутність, яка використовується для досягнення 100% абстракції. Він може містити лише абстрактні методи, які може замінити клас, що реалізує інтерфейс.
Інтерфейс певним чином діє як проект класу, де він надає класу прототипи абстрактних методів і статичні константи, а потім клас повинен замінити ці методи, реалізувавши інтерфейс.
Питання 2) Які переваги інтерфейсу в Java?
Відповідь: Деякі переваги інтерфейсу такі:
- Інтерфейс діє як проект класу.
- Інтерфейс забезпечує 100% абстракцію в Java, оскільки він має всі абстрактні методи.
- Інтерфейси можуть бути використані для досягнення багаторазового успадкування в Java. Java не дозволяє успадковувати більше ніж один клас, але клас може реалізовувати кілька інтерфейсів.
# 3) Чи може інтерфейс мати методи?
Відповідь: Інтерфейси можуть мати прототипи методів та статичні та кінцеві константи. Але починаючи з Java 8, інтерфейси можуть містити статичні та стандартні методи.
Q # 4) Чи можемо ми оголосити інтерфейс остаточним?
Відповідь: Ні. Якщо ми оголосимо інтерфейс остаточним, клас не зможе його реалізувати. Без реалізації будь-яким класом інтерфейс не буде виконувати жодних цілей.
Детальніше про інтерфейси
Інтерфейси - це схеми, як клас, але він матиме лише декларацію методу. Він не матиме жодного методу реалізації. Усі методи в інтерфейсі за замовчуванням є загальнодоступними. Інтерфейс Java 1.8 може мати статичні методи та методи за замовчуванням.
Інтерфейси в основному використовуються в API.
Наприклад: Вважайте, що ви проектуєте двигун автомобіля.
Коли ви закінчите з апаратною частиною, ви хочете, щоб деякі функціональні можливості програмного забезпечення були реалізовані клієнтом, який використовує ваш движок. Отже, у такому випадку ви можете визначити свої функціональні можливості двигуна в інтерфейсі.
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); } }
Тут клас Vehicle - це підклас, який реалізує інтерфейс двигуна.
Що таке абстрактні класи?
Абстрактний клас схожий на клас, але він матиме абстрактні методи та конкретні методи. Абстрактні методи не мають реалізації. Він матиме лише декларацію методу.
Правила, яких слід дотримуватися для абстрактного класу
- Абстрактний клас неможливо створити.
- Клас Child, який розширює абстрактний клас, повинен реалізовувати всі абстрактні методи батьківського класу, або клас Child повинен бути оголошений абстрактним класом.
Коли ви хочете розробити часткову реалізацію, ви можете піти на абстрактний клас.
Приклад програми абстрактних класів:
EmployeeDetails.java
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); }
Клас, який збирається продовжити абстрактний клас.
HR.java
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'); } }
Ключові моменти, на які слід звернути увагу:
- В інтерфейсах всі методи не матимуть реалізації методу.
- Клас, який реалізує інтерфейс, повинен реалізовувати всі методи в цьому конкретному інтерфейсі.
- Абстрактні класи можуть мати як абстрактні методи, так і звичайні конкретні методи. Абстрактні методи не мають реалізації.
- Клас, який розширює абстрактний клас, повинен мати реалізацію для всіх абстрактних методів у абстрактному класі.
- Якщо підклас не має достатньо інформації для реалізації абстрактних методів, тоді підклас повинен бути оголошений як абстрактний клас.
Висновок
У цьому підручнику ми представили основні концепції інтерфейсів у Java. Ми обговорили визначення інтерфейсу разом із потребою в інтерфейсах. Ми дослідили їх основний синтаксис та визначення. Потім ми обговорили, як використовувати інтерфейси, для яких ми використовуємо ключове слово ‘implements’.
Ми дізналися, як використовувати кілька інтерфейсів та успадкування інтерфейсу в Java. Використовуючи кілька інтерфейсів, ми можемо реалізувати множинне успадкування в Java. Наслідування інтерфейсу - це коли один інтерфейс розширює інший інтерфейс.
=> Завітайте сюди, щоб побачити навчальну серію Java для всіх
Рекомендована література
- ООП Java: Вступ до об’єктно-орієнтованого програмування на Java
- Порівнянні та порівняльні інтерфейси в Java
- Покращення інтерфейсу в Java 8 - функціональний інтерфейс Java
- Підручник з інтерфейсу Java Map з реалізацією та прикладами
- Інтерфейс ListIterator в Java з прикладами
- Інтерфейс маркера в Java: серіалізується та клонується
- Встановити інтерфейс у Java: Підручник з набору Java із прикладами
- Підручник з роздумів про Java з прикладами