Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ Java

Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ интСрфСйсов Java ΠΈ ΡƒΠ·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΡ… для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° ΠΈ мноТСствСнного наслСдования.

1. ΠžΠ±Π·ΠΎΡ€

Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± интСрфСйсах Π½Π° Java. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΡ… для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° ΠΈ мноТСствСнного наслСдования.

2. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² Java?

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ интСрфСйса Π½Π° Java:

Π”Π°Π»Π΅Π΅, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ создадим ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹ΠΉ класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹ΠΉ интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ создали:

2.1. ΠŸΡ€Π°Π²ΠΈΠ»Π° создания интСрфСйсов

Π’ интСрфСйсС Π½Π°ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ:

3. Π§Π΅Π³ΠΎ ΠœΡ‹ МоТСм Π”ΠΎΡΡ‚ΠΈΡ‡ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π˜Ρ…?

3.1. ΠŸΠΎΠ²Π΅Π΄Π΅Π½Ρ‡Π΅ΡΠΊΠ°Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, поТалуйста, посСтитС наш ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ Comparator ΠΈ Comparable Π½Π° Java.

3.2. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ НаслСдованиС

ΠšΠ»Π°ΡΡΡ‹ Java ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ сингулярноС наслСдованиС. Однако, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ интСрфСйсы, ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько наслСдований.

3.3. ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ

Π’ Java ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ интСрфСйсов. НапримСр, интСрфСйс Shape ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ β€” это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠšΡ€ΡƒΠ³ ΠΈΠ»ΠΈ ΠšΠ²Π°Π΄Ρ€Π°Ρ‚.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с опрСдСлСния Π€ΠΎΡ€ΠΌΡ‹ интСрфСйса:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ создадим класс Circle :

А Ρ‚Π°ΠΊΠΆΠ΅ ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ класс:

4. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² интСрфСйсах

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ интСрфСйсы Π² Java 7 ΠΈ Π½ΠΈΠΆΠ΅ Π½Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ.

5. ΠŸΡ€Π°Π²ΠΈΠ»Π° НаслСдования интСрфСйса

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ мноТСствСнного наслСдования Ρ‡Π΅Ρ€Π΅Π· интСрфСйсы, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ нСсколько ΠΏΡ€Π°Π²ΠΈΠ». Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим это ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ.

5.1. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ, Π Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠΉ Π”Ρ€ΡƒΠ³ΠΎΠΉ Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ

Когда интСрфСйс Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ интСрфСйс, ΠΎΠ½ наслСдуСт всС абстрактныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ этого интСрфСйса. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с создания Π΄Π²ΡƒΡ… интСрфСйсов, Π˜ΠΌΠ΅ΡŽΡ‰ΠΈΡ… Ρ†Π²Π΅Ρ‚ ΠΈ Π€ΠΎΡ€ΠΌΡƒ :

5.2. Абстрактный класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс

6. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹

Java с самого Π½Π°Ρ‡Π°Π»Π° ΠΈΠΌΠ΅Π»Π° мноТСство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… интСрфСйсов, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Бопоставимый (начиная с Java 1.2) ΠΈ УправляСмый (начиная с Java 1.0).

7. Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ Π΄Π°Π»ΠΈ ΠΎΠ±Π·ΠΎΡ€ интСрфСйсов Java ΠΈ рассказали ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для достиТСния ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° ΠΈ мноТСствСнного наслСдования.

Как всСгда, ΠΏΠΎΠ»Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ†Ρ‹ ΠΊΠΎΠ΄Π° доступны Π½Π° GitHub.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ Π² Java ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ΅

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ – это ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ написанныС Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ людьми, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΈ со внСшними прилоТСниями. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ со слоями сСрвисов, бСзопасности, DAO ΠΈ Ρ‚.Π΄. Π­Ρ‚ΠΎ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ конструкции, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… для измСнСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ‚Ρ€ΠΎΠ³Π°Ρ‚ΡŒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅.

Новички часто ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚, Ρ‡Π΅ΠΌ интСрфСйс отличаСтся ΠΎΡ‚ абстрактного класса. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ Π² Java ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡ€ΡƒΡŽΡ‚ отсутствиС мноТСствСнного наслСдования классов. Π£ класса-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ абстрактный класс-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ, Π° Π²ΠΎΡ‚ интСрфСйсов класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ (ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ) сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Π½Π° Java ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ класс:

Π’ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ интСрфСйс классС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ всС прСдусмотрСнныС интСрфСйсом ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ появились Π² Java 8. Π˜Ρ… ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ default. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это ΠΌΠ΅Ρ‚ΠΎΠ΄ say_goodbye, рСализация ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ прописана прямо Π² интСрфСйсС. Π”Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ использованию, Π½ΠΎ ΠΏΡ€ΠΈ нСобходимости ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π² ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ… интСрфСйс классах.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс Java

Если Ρƒ интСрфСйса Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ абстрактный ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс. Π•Π³ΠΎ принято ΠΏΠΎΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ @FunctionalInterface, которая ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ компилятору, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ абстрактного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² этом интСрфСйсС Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎΠ± ошибкС. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Ρ… (default) ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρƒ интСрфСйса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ мноТСство – Π² Ρ‚ΠΎΠΌ числС ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… классу java.lang.Object.

Как выглядит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс Π½Π° Java:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ интСрфСйсы появились Π² Java 8. Они обСспСчили ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, использованиС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈ понятным:

Π’ Ρ‚ΠΎΠΉ ΠΆΠ΅ вСрсии появились ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ встроСнных интСрфСйсов: java.util.function ΠΈ java.util.stream.

РСализация интСрфСйсов классами Java

Допустим, Π΅ΡΡ‚ΡŒ интСрфСйс Edible, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ классы Fruit, Vegetable, Fish. ЭкзСмпляры этих классов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π² конструкторах: для Ρ„Ρ€ΡƒΠΊΡ‚ΠΎΠ² Π·Π°Π΄Π°Ρ‘ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ сорт, для Ρ€Ρ‹Π±Ρ‹ – Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Ρ€Π°ΠΉΠΎΠ½ Π²Ρ‹Π»ΠΎΠ²Π° ΠΈ вСс ΠΏΠΎΡ€Ρ†ΠΈΠΈ Π² Π³Ρ€Π°ΠΌΠΌΠ°Ρ…. Но ссылки Π½Π° ΠΎΠ±Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ…Ρ€Π°Π½ΠΈΠΌ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° – Β«Π‘ΡŠΠ΅ΡΡ‚Π½ΠΎΠ΅Β».

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹ΡˆΠ΅ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΎΡΠ½ΠΎΠ²ΠΎΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ООП β€” ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. ΠœΡ‹ раскрыли ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ явлСниС β€” ΡΡŠΠ΅Π΄ΠΎΠ±Π½ΠΎΡΡ‚ΡŒ β€” Ρ‡Π΅Ρ€Π΅Π· нСсколько классов, свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… частично ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ явлСния β€” это ΠΈ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. Если Π½ΡƒΠΆΠ½ΠΎ, Ρ‚Π°ΠΊΡƒΡŽ систСму всСгда ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΈ ΡΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π’ нашСм случаС β€” Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ ΡΡŠΠ΅ΡΡ‚Π½ΠΎΠ³ΠΎ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΡ… приготовлСния.

Π’ Java ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π·:

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Π²Ρ‹Ρ€ΡƒΡ‡Π°Π΅Ρ‚ Π² ситуации, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ создании ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ класса Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ присвоСн.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ – это ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ написанныС Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ людьми, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΈ со внСшними прилоТСниями. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ со слоями сСрвисов, бСзопасности, DAO ΠΈ Ρ‚.Π΄. Π­Ρ‚ΠΎ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ конструкции, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… для измСнСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ‚Ρ€ΠΎΠ³Π°Ρ‚ΡŒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅.

Новички часто ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚, Ρ‡Π΅ΠΌ интСрфСйс отличаСтся ΠΎΡ‚ абстрактного класса. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ Π² Java ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡ€ΡƒΡŽΡ‚ отсутствиС мноТСствСнного наслСдования классов. Π£ класса-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ абстрактный класс-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ, Π° Π²ΠΎΡ‚ интСрфСйсов класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ (ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ) сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Π½Π° Java ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ класс:

Π’ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ интСрфСйс классС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ всС прСдусмотрСнныС интСрфСйсом ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ появились Π² Java 8. Π˜Ρ… ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ default. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это ΠΌΠ΅Ρ‚ΠΎΠ΄ say_goodbye, рСализация ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ прописана прямо Π² интСрфСйсС. Π”Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ использованию, Π½ΠΎ ΠΏΡ€ΠΈ нСобходимости ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π² ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ… интСрфСйс классах.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс Java

Если Ρƒ интСрфСйса Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ абстрактный ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс. Π•Π³ΠΎ принято ΠΏΠΎΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ @FunctionalInterface, которая ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ компилятору, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ абстрактного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² этом интСрфСйсС Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎΠ± ошибкС. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Ρ… (default) ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρƒ интСрфСйса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ мноТСство – Π² Ρ‚ΠΎΠΌ числС ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… классу java.lang.Object.

Как выглядит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс Π½Π° Java:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ интСрфСйсы появились Π² Java 8. Они обСспСчили ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, использованиС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈ понятным:

Π’ Ρ‚ΠΎΠΉ ΠΆΠ΅ вСрсии появились ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ встроСнных интСрфСйсов: java.util.function ΠΈ java.util.stream.

РСализация интСрфСйсов классами Java

Допустим, Π΅ΡΡ‚ΡŒ интСрфСйс Edible, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ классы Fruit, Vegetable, Fish. ЭкзСмпляры этих классов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π² конструкторах: для Ρ„Ρ€ΡƒΠΊΡ‚ΠΎΠ² Π·Π°Π΄Π°Ρ‘ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ сорт, для Ρ€Ρ‹Π±Ρ‹ – Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Ρ€Π°ΠΉΠΎΠ½ Π²Ρ‹Π»ΠΎΠ²Π° ΠΈ вСс ΠΏΠΎΡ€Ρ†ΠΈΠΈ Π² Π³Ρ€Π°ΠΌΠΌΠ°Ρ…. Но ссылки Π½Π° ΠΎΠ±Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ…Ρ€Π°Π½ΠΈΠΌ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° – Β«Π‘ΡŠΠ΅ΡΡ‚Π½ΠΎΠ΅Β».

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹ΡˆΠ΅ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΎΡΠ½ΠΎΠ²ΠΎΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ООП β€” ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. ΠœΡ‹ раскрыли ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ явлСниС β€” ΡΡŠΠ΅Π΄ΠΎΠ±Π½ΠΎΡΡ‚ΡŒ β€” Ρ‡Π΅Ρ€Π΅Π· нСсколько классов, свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… частично ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ явлСния β€” это ΠΈ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. Если Π½ΡƒΠΆΠ½ΠΎ, Ρ‚Π°ΠΊΡƒΡŽ систСму всСгда ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΈ ΡΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π’ нашСм случаС β€” Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ ΡΡŠΠ΅ΡΡ‚Π½ΠΎΠ³ΠΎ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΡ… приготовлСния.

Π’ Java ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π·:

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Π²Ρ‹Ρ€ΡƒΡ‡Π°Π΅Ρ‚ Π² ситуации, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ создании ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ класса Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ присвоСн.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ Java – Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅?

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Java Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° класс, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сигнатуры ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ поля. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ‚ΠΎΠ»ΡŒΠΊΠΎ подпись(имя, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ) ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ способ достиТСния ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ интСрфСйса Java

Π’ΠΎΡ‚ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ интСрфСйса Java:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, интСрфСйс ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ с использованиСм ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова. Как ΠΈ Π² случаС с классами, интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСн ΠΊΠ°ΠΊ общСдоступный ΠΈΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ(Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° доступа).

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ содСрТит ΠΎΠ΄Π½Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄. Доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ нСпосрСдствСнно ΠΈΠ· интСрфСйса, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊ:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° доступ ΠΊ статичСской ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² классС.

Однако этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ классом, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Ρ‹ смоТСтС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ доступ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π» ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚, ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

РСализация интСрфСйса

Π’ΠΎΡ‚ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс MyInterface, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Ρ‡Π°ΡΡ‚ΡŒ MyInterface Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΠΎΠ³ΠΎ объявлСния класса. Π­Ρ‚ΠΎ сообщаСт компилятору Java, Ρ‡Ρ‚ΠΎ класс MyInterfaceImpl Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс MyInterface.

Класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс, Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π² Π½Π΅ΠΌ. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅ сигнатуру(имя + ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹), ΠΊΠ°ΠΊ объявлСно. Класс Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ(ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ) ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ интСрфСйса. Волько ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

ЭкзСмпляры интСрфСйса

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ класс Java Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс Java, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ экзСмпляр этого класса Π² качСствС экзСмпляра. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ объявлСна пСрСмСнная Ρ‚ΠΈΠΏΠ° интСрфСйса MyInterface, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ созданный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ MyInterfaceImpl. Java позволяСт это, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ класс MyInterfaceImpl Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ MyInterface. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° экзСмпляры класса MyInterfaceImpl ΠΊΠ°ΠΊ Π½Π° экзСмпляры MyInterface.

Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ экзСмпляры интСрфСйса ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ всСгда ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ экзСмпляр Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс, ΠΈ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° этот экзСмпляр ΠΊΠ°ΠΊ Π½Π° экзСмпляр интСрфСйса.

РСализация Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… интСрфСйсов

Класс Java ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ нСсколько интСрфСйсов. Π’ этом случаС класс Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π²ΠΎ всСх Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… интСрфСйсах. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π­Ρ‚ΠΎΡ‚ класс Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π΄Π²Π°, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… MyInterface ΠΈ MyOtherInterface. Π’Ρ‹ пСрСчисляСтС ΠΈΠΌΠ΅Π½Π° для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ послС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова Implements, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятой.

Если интСрфСйсы Π½Π΅ находятся Π² Ρ‚Π΅Ρ… ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ…, Ρ‡Ρ‚ΠΎ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ класс, Π²Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…. Они ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструкции ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. НапримСр:

Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ классом Π²Ρ‹ΡˆΠ΅:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ интСрфСйс содСрТит ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄. Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ классом MyInterfaceImpl.

ΠŸΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ подписи ΠΌΠ΅Ρ‚ΠΎΠ΄Π°

Если класс Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ нСсколько интСрфСйсов, сущСствуСт риск, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ сигнатурой(имя + ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ класс ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π·Π°Π΄Π°Π½Π½ΠΎΠΉ сигнатурой Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ.

БпСцификация Π½Π΅ Π΄Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π’Π°ΠΌ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² этой ситуации.

КакиС Ρ‚ΠΈΠΏΡ‹ Java ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ интСрфСйсы?

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ интСрфСйсы:

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ интСрфСйса

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ константы. Однако часто Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ смысл ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ константы.

ОсобСнно, Ссли эти константы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ классами, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² вычислСниях, ΠΈΠ»ΠΈ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π― ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ Π²Π°ΠΌ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ размСщСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

ВсС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² интСрфСйсС ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ, Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ опуститС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово public Π² объявлСнии ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ интСрфСйса

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько объявлСний ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ для этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π­Ρ‚ΠΎ зависит ΠΎΡ‚ классов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ.

ВсС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ, Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ опуститС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово public Π² объявлСнии ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ интСрфСйса ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

Π”ΠΎ Java 8 интСрфСйсы Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π° содСрТали Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сигнатуры ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Однако это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ, ΠΊΠΎΠ³Π΄Π° API Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄.

Если API просто добавляСт ΠΌΠ΅Ρ‚ΠΎΠ΄, всС классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ интСрфСйс, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄. Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ссли всС Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ классы располоТСны Π² API. Но Ссли Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ классы находятся Π² клиСнтском ΠΊΠΎΠ΄Π΅ API(ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ API), Ρ‚ΠΎ этот ΠΊΠΎΠ΄ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ΡΡ.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° этот интСрфСйс ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, API с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ прилоТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ этот API ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» ResourceLoader ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Если Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ API Ρ…ΠΎΡ‡Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² ResourceLoader, Ρ‚ΠΎ класс FileLoader Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΄ΠΎ Π½ΠΎΠ²ΠΎΠΉ вСрсии API.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Java 8 Π΄ΠΎΠ±Π°Π²ΠΈΠ»Π° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ. ΠœΠ΅Ρ‚ΠΎΠ΄ интСрфСйса ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ΠšΠ»Π°ΡΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ интСрфСйс, Π½ΠΎ Π½Π΅ содСрТат Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, автоматичСски ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π’Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ добавляСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ(Path). Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π΅ учитываСтся фактичСская рСализация(Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π»Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ интСрСсно. Π’Π°ΠΆΠ½ΠΎ Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ просто ΠΏΡƒΡ‚Π΅ΠΌ явной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠ°ΠΊ это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ дСлаСтся.

БтатичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ интСрфСйса

БтатичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² Java Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ.

Π’Ρ‹Π·ΠΎΠ² статичСского ΠΌΠ΅Ρ‚ΠΎΠ΄Π° выглядит ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π²Ρ‹Π·ΠΎΠ² статичСского ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² классС. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π·ΠΎΠ²Π° статичСского ΠΌΠ΅Ρ‚ΠΎΠ΄Π° print() ΠΈΠ· Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ MyInterface:

БтатичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² интСрфСйсах ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, ΠΊΠΎΠ³Π΄Π° Ρƒ вас Π΅ΡΡ‚ΡŒ нСсколько слуТСбных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ доступными. НапримСр, Vehicle ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ printVehicle(Vehicle v).

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ ΠΈ наслСдованиС

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Java ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ классы ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… классов. Π’Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ наслСдованиС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово extends.

MySubInterface Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ MySuperInterface. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ MySubInterface наслСдуСт всС поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΡ‚ MySuperInterface. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли класс Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ MySubInterface, этот класс Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ Π² MySubInterface, Ρ‚Π°ΠΊ ΠΈ Π² MySuperInterface.

МоТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² подинтСрфСйсС с Ρ‚ΠΎΠΉ ΠΆΠ΅ сигнатурой(имя + ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹), Ρ‡Ρ‚ΠΎ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² супСринтСрфСйсС, Ссли Π²Ρ‹ считаСтС, Ρ‡Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ Π² вашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ классов, интСрфСйсы ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… супСринтСрфСйсов. Π’Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ это, пСрСчисляя ΠΈΠΌΠ΅Π½Π° всСх интСрфСйсов для наслСдования, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятой. Класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСтся ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ…, Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ интСрфСйса ΠΈ Π΅Π³ΠΎ супСринтСрфСйсов.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ интСрфСйса Java, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСтся ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… интСрфСйсов:

Как ΠΈ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… интСрфСйсов, Π½Π΅ сущСствуСт ΠΏΡ€Π°Π²ΠΈΠ» для Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° нСсколько супСринтСрфСйсов ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ сигнатурой(имя + ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹).

НаслСдованиС ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ интСрфСйса ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° наслСдования интСрфСйса. Π₯отя ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ класс ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько интСрфСйсов, Π΄Π°ΠΆΠ΅ Ссли интСрфСйсы содСрТат ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ сигнатурой, это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ссли ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΈΠ· этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ссли Π΄Π²Π° интСрфСйса содСрТат ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ сигнатуру ΠΌΠ΅Ρ‚ΠΎΠ΄Π°(имя + ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹) ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· интСрфСйсов ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, класс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ автоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π° интСрфСйса.

Битуация такая ΠΆΠ΅, Ссли интСрфСйс Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚(наслСдуСт) нСсколько интСрфСйсов, ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΈΠ· этих интСрфСйсов содСрТат ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ сигнатурой, Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· супСринтСрфСйсов ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π’ ΠΎΠ±Π΅ΠΈΡ… Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹Ρ… ситуациях компилятор Java Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс(Ρ‹), явно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅Ρ‚ сомнСний Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ класс. РСализация Π² классС ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½Π°Π΄ Π»ΡŽΠ±Ρ‹ΠΌΠΈ рСализациями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ

Java-интСрфСйсы – это способ достиТСния ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ°. ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ – это концСпция, которая Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΈ мысли, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ²Π»Π°Π΄Π΅Ρ‚ΡŒ Сю. По сути, ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ экзСмпляр класса(ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°) ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ Π±Ρ‹Π» Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Π—Π΄Π΅ΡΡŒ Ρ‚ΠΈΠΏ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π»ΠΈΠ±ΠΎ класс, Π»ΠΈΠ±ΠΎ интСрфСйс.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° эту ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ классов:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ классы ΡΠ²Π»ΡΡŽΡ‚ΡΡ частями ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ транспортных срСдств ΠΈ Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, с полями ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. Π­Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ этих классов – ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти сущности ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² XML, JSON ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹. Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это Π±Ρ‹Π»ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ с использованиСм ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, доступного для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Car, Truck ΠΈΠ»ΠΈ Vehicle. ΠœΠ΅Ρ‚ΠΎΠ΄ store(), ΠΌΠ΅Ρ‚ΠΎΠ΄ serializeToXML() ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ serializeToJSON().

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, Ρ‡Ρ‚ΠΎ рСализация этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² нСпосрСдствСнно Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ грязной ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

Π“Π΄Π΅ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ схСмС Π²Ρ‹ Π±Ρ‹ помСстили эти Ρ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ доступны для всСх классов?

Одним ΠΈΠ· способов Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π±Ρ‹Π»ΠΎ Π±Ρ‹ созданиС ΠΎΠ±Ρ‰Π΅Π³ΠΎ супСркласса для класса Vehicle ΠΈ Driver, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ хранСния ΠΈ сСриализации. Однако это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ бСспорядку. Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ классов большС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ транспортныС срСдства ΠΈ Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ привязана ΠΊ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌ хранСния ΠΈ сСриализации, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Π² вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

Π›ΡƒΡ‡ΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ интСрфСйсы с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ хранСния ΠΈ сСриализации ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ классам Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти интСрфСйсы. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ‚Π°ΠΊΠΈΡ… интСрфСйсов:

Когда ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ класс Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ эти Π΄Π²Π° интСрфСйса ΠΈ ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ этих интСрфСйсов, привСдя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊ экзСмплярам Ρ‚ΠΈΠΏΠΎΠ² интСрфСйса. Π’Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ классу относится Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ссли Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊΠΎΠΉ интСрфСйс ΠΎΠ½ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚.

Как Π²Ρ‹ ΡƒΠΆΠ΅, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сСбС ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, интСрфСйсы ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ понятный способ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сквозных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² классах, Ρ‡Π΅ΠΌ наслСдованиС.

Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ интСрфСйсы

Π­Ρ‚ΠΎΡ‚ интСрфСйс прСдставляСт интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит СдинствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся производством(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ произвСсти СдинствСнный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ yield() – Object, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Java.

Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ для экзСмпляра CarProducer установлСн Π½Π° Car, большС Π½Π΅Ρ‚ нСобходимости ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½Ρ‹ΠΉ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° yield(), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² объявлСнии исходного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² интСрфСйсС MyProducer ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Π½ Π² ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅ ΠΏΡ€ΠΈ использовании.

Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π½Π΅Ρ‚ нСобходимости ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉΡ€ΡƒΡ‡ΠΊΠΈ(), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ рСализация CarProducer ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ это экзСмпляр Car.

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Java Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описаны Π² ΠΌΠΎΠ΅ΠΌ руководствС ΠΏΠΎ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡŽ Java.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ интСрфСйсы

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ Π² Java

1. Знакомство с интСрфСйсами

БСгодня Ρƒ вас прямо дСнь Π·Π½Π°Π½ΠΈΠΉ. Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° новая ΠΈ интСрСсная Ρ‚Π΅ΠΌΠ° β€” это интСрфСйсы.

Π’ΠΎΡ‚ нСсколько ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Ρ„Π°ΠΊΡ‚ΠΎΠ² ΠΎΠ± интСрфСйсах:

1. ОбъявлСниС интСрфСйса

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ интСрфСйсов. Π—Π°Ρ‚ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ Ρƒ интСрфСйса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ. Π•Ρ‰Π΅ говорят, Ρ‡Ρ‚ΠΎ Π² Java Π΅ΡΡ‚ΡŒ мноТСствСнноС наслСдованиС интСрфСйсов. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

3. НаслСдованиС классов ΠΎΡ‚ интСрфСйсов

ВСхничСски ΠΌΠ΅ΠΆΠ΄Ρƒ словами extends ΠΈ implements Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹: ΠΈ Ρ‚ΠΎ, ΠΈ Ρ‚ΠΎ β€” это наслСдованиС. Π’Π°ΠΊ Π±Ρ‹Π»ΠΎ сдСлано, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°. Π’ английском языкС принято Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ классы Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ( extends ), Π° интСрфСйсы Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ ( implements )

4. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

И самоС Π²Π°ΠΆΠ½ΠΎΠ΅: Π² интСрфСйсах нСльзя ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (хотя статичСскиС ΠΌΠΎΠΆΠ½ΠΎ).

А Π·Π°Ρ‡Π΅ΠΌ ΠΆΠ΅ Π½ΡƒΠΆΠ½Ρ‹ интСрфСйсы? Когда ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚? Π£ интСрфСйсов Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΡΠΈΠ»ΡŒΠ½Ρ‹Ρ… прСимущСства ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с классами:

2. ΠžΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠ΅ «описания ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²Β» ΠΎΡ‚ ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ интСрфСйсов это Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΠΈΠ»ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ большС. ΠœΡ‹ сдСлаСм ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ «класс для всСх», ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ «класс для своих», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ унаслСдуСм ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚:

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ скрываСм Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½ΠΎ ΠΈ сам класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Π΅ содСрТит (Π²Π΅Π·Π΄Π΅ Π² ΠΊΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ интСрфСйс). Π­Ρ‚ΠΎ позволяСт ΠΎΡ‡Π΅Π½ΡŒ Π³ΠΈΠ±ΠΊΠΎ, прямо Π² процСссС исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅, мСняя ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° скрытно ΠΎΡ‚ всСх классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚.

Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ мощная тСхнология Π² сочСтании с ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠΎΠΌ. БСйчас Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π·Π°Ρ‡Π΅ΠΌ Ρ‚Π°ΠΊ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ. Π’Ρ‹ сначала Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, состоящими ΠΈΠ· дСсятков ΠΈΠ»ΠΈ сотСн классов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ интСрфСйсы способны сущСствСнно ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Тизнь.

3. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС

Π’ Java всС классы ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ класс-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования классы часто ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько классов-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π½ΠΎ приносит Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Π’ Java ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ компромиссу: Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΠ»ΠΈ мноТСствСнноС наслСдованиС классов, Π½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠ»ΠΈ мноТСствСнноС наслСдованиС интСрфСйсов. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько интСрфСйсов-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ. Класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько интСрфСйсов-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ класс-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ мноТСствСнноС наслСдованиС классов Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΠ»ΠΈ, Π° интСрфСйсов β€” Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠ»ΠΈ? ВсС Π΄Π΅Π»ΠΎ Π² Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Π°Π»ΡŒΠ½ΠΎΠΌ наслСдовании:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ интСрфСйсы Π² java

Когда класс B наслСдуСтся ΠΎΡ‚ класса A, ΠΎΠ½ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΎ классах C ΠΈ D. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса A Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ считаСт Π½ΡƒΠΆΠ½Ρ‹ΠΌ. Класс C Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса A, Π½ΠΎ ΡƒΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌ способом. И Π² классС D это всС выливаСтся Π² ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Ρ‚Π°ΠΊΠΎΠΉ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ 3 класса:

А Ρ‚.ΠΊ. интСрфСйсам Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‚ΠΎ ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° Ρƒ Π½ΠΈΡ… Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ мноТСствСнноС наслСдованиС интСрфСйсов.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹

β€” ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Амиго! БСгодня Ρƒ тСбя дСнь ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΉ. Новая ΠΈ интСрСсная Ρ‚Π΅ΠΌΠ° – это интСрфСйсы.

β€” Ага. Π”Π΅Π½ΡŒ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ чудСсный, Ρ‡Ρ‚ΠΎ я ΠΏΡ€ΠΈΠ΄Ρƒ Π΄ΠΎΠΌΠΎΠΉ ΠΈ ΠΏΡ€ΠΈΠΌΡƒ Π²Π°Π½Π½Ρƒ ΠΏΠΎΠ»Π½ΡƒΡŽ Π²ΠΎΠ΄Ρ‹.

2) Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ абстрактныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (слово abstract ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ).

3) На самом Π΄Π΅Π»Π΅ Ρƒ интСрфСйсов всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ β€” public.Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ интСрфСйсов.

Класс ChessItem объявлСн абстрактным: ΠΎΠ½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» всС унаслСдованныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΡ€ΠΎΠΌΠ΅ draw.

β€” Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ. А Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹ интСрфСйсы? Когда ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚?

β€” Π£ интСрфСйсов Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΡΠΈΠ»ΡŒΠ½Ρ‹Ρ… прСимущСства ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с классами:

1) ΠžΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠ΅ «описания ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²Β» ΠΎΡ‚ ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ интСрфСйсов, это Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΠΈΠ»ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ большС. ΠœΡ‹ сдСлаСм ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ «класс для всСх», ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ «класс для своих», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ унаслСдуСм ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚:

ΠœΡ‹ Ρ€Π°Π·Π±ΠΈΠ»ΠΈ наш класс Π½Π° Π΄Π²Π°: интСрфСйс ΠΈ класс, унаслСдованный ΠΎΡ‚ интСрфСйса.

β€” И Π² Ρ‡Π΅ΠΌ Ρ‚ΡƒΡ‚ прСимущСство?

β€” Один ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ интСрфСйс ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ (Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ) Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ классы. И Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ своС собствСнноС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ArrayList ΠΈ LinkedList – это Π΄Π²Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса List.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ скрываСм Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½ΠΎ ΠΈ Π΄Π°ΠΆΠ΅ сам класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Π΅ содСрТит (Π²Π΅Π·Π΄Π΅ Π² ΠΊΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ интСрфСйс). Π­Ρ‚ΠΎ позволяСт ΠΎΡ‡Π΅Π½ΡŒ Π³ΠΈΠ±ΠΊΠΎ, прямо Π² процСссС исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅, мСняя ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° скрытно ΠΎΡ‚ всСх классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚.

Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ мощная тСхнология Π² сочСтании с ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠΎΠΌ. БСйчас Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π·Π°Ρ‡Π΅ΠΌ Ρ‚Π°ΠΊ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ΅Π½ сначала ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, состоящими ΠΈΠ· дСсятков ΠΈΠ»ΠΈ сотСн классов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ интСрфСйсы способны сущСствСнно ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ‚Π΅Π±Π΅ Тизнь.

2) ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ наслСдованиС.

Π’ Java всС классы ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса-родитСля. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования, классы часто ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько классов-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π½ΠΎ приносит Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Π’ Java ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ компромиссу – Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΠ»ΠΈ мноТСствСнноС наслСдованиС классов, Π½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠ»ΠΈ мноТСствСнноС наслСдованиС интСрфСйсов. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько интСрфСйсов-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ. Класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько интСрфСйсов-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ класс-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *