Co to jest interfejs w Javie? Przewodnik dla początkujących po interfejsie Java. Jak tego użyć? Przykład w załączeniu.
Opublikowany: 2020-10-31
Dlaczego i kiedy używać interfejsów?
- Interfejs jest typem referencyjnym w Javie.
- Jest podobny do klasy.
- Jest to zbiór abstrakcyjnych metod.
- Służy do osiągnięcia całkowitej abstrakcji.
Uważam, że jest to pierwsze pytanie, którego można się spodziewać w Wywiadu w Javie. Bardzo podstawowe pytania, ale szeroko stosowane w rozmowie kwalifikacyjnej
Nie ma na to idealnej odpowiedzi, a na to pytanie można odpowiedzieć na wiele sposobów. A może twój ankieter szuka praktycznego podejścia do tych pytań? Możliwy.
W takim razie zacznijmy od podstawowej definicji interfejsu Java
Omówimy to samo z wieloma przykładami.
- Co to jest interfejs w Javie?
- Co to jest interfejs w java z przykładem czasu rzeczywistego?
- Dlaczego warto korzystać z interfejsu w java
- Projektowanie interfejsu Java
- Najczęstsze pytania podczas rozmowy kwalifikacyjnej na Interface
Podstawy interfejsu:

-
interface
to tylko kontrakt, opis zachowania, jakie będzie miała klasa implementująca. Klasa implementująca zapewnia, że będzie miała te metody, których można na niej użyć. Jest to w zasadzie kontrakt lub obietnica, którą klasa musi złożyć. - Co jeśli w Twoich projektach wszystkie różne implementacje mają te same sygnatury metod? W takim przypadku interfejs działa najlepiej.
- Na dalszym etapie po wdrożeniu dużego projektu zobaczmy, czy zaimplementowałeś definicje interfejsów w ~50 miejscach, co jeśli zmienisz interfejs? Musisz dokonać modyfikacji we wszystkich 50 miejscach w swoich projektach.
- Wskazane jest, aby poświęcić trochę więcej czasu na definiowanie interfejsu na etapie projektowania, zamiast zmieniać go na późniejszym etapie
- Interfejs składa się z
singleton
zmiennych (public static final
) ipublic abstract
. Zwykle wolimy interfejs w czasie rzeczywistym, kiedy wiemy, co robić, ale nie wiemy, jak to zrobić. Interfejs nie może zawierać pól instancji. - Klasy, które implementują interfejs, muszą udostępniać definicję metody dla wszystkich obecnych metod.
- Klasa może implementować kilka interfejsów.
- Implementację interfejsu można dodać do dowolnej istniejącej klasy innej firmy.
- Interfejs może zawierać dowolną liczbę metod.
- W Javie nie można utworzyć instancji interfejsu.
- Interfejs nie zawiera żadnych konstruktorów.
- Interfejs nie jest rozszerzony o klasę; jest zaimplementowany przez klasę.
- Interfejs może rozszerzać wiele interfejsów.
Przykłady interfejsów:
Wskazówka 1.
Utwórz interfejs CrunchifyDatabaseInterface.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package crunchify . com . java . tutorials ; import java . util . Map ; import java . util . UUID ; /** * @author Crunchify.com * What Is an Interface in Java? Beginners Guide to Java Interface. */ public interface CrunchifyDatabaseInterface { // Basic Database CRUD Operations // Insert boolean insertCrunchifyRecord ( UUID id , String name , String address , String phone , String zip , String comments ) ; // Delete public boolean deleteCrunchifyRecord ( UUID id ) ; // Get public Map < String , String > getListOfAllCrunchifyRecords ( ) ; // Update boolean updateCrunchifyRecord ( UUID id , Map < String , String > records ) ; } |
Wskazówka 2.
Implementuj interfejs CrunchifyDatabaseOracleImpl.java
Kiedy pierwszy raz zaimplementujesz interfejs, Eclipse pokaże Ci, że dodajesz niezaimplementowane metody.

Po prostu kliknij „ Add unimplemented methods
”, a Twoja klasa IMPL powinna być gotowa z Auto-generated method stub
.
Wskazówka 3. Rzeczywista metoda Impl.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
package crunchify . com . java . tutorials ; import java . util . Map ; import java . util . UUID ; /** * @author Crunchify.com * What Is an Interface in Java? Beginners Guide to Java Interface. */ public class CrunchifyDatabaseOracleImpl implements CrunchifyDatabaseInterface { // Override: Indicates that a method declaration is intended to override a method declaration in a supertype. // If a method is annotated with this annotation type compilers are required to generate an error message unless at least one of the following conditions hold: // The method does override or implement a method declared in a supertype. // The method has a signature that is override-equivalent to that of any public method declared in Object. @Override public boolean insertCrunchifyRecord ( UUID id , String name , String address , String phone , String zip , String comments ) { // TODO Provide your actual implementation here based on your need specific to Oracle return false ; } // UUID(): A class that represents an immutable universally unique identifier (UUID). // A UUID represents a 128-bit value. // There exist different variants of these global identifiers. // The methods of this class are for manipulating the Leach-Salz variant, although the constructors allow the creation of any variant of UUID @Override public boolean deleteCrunchifyRecord ( UUID id ) { // TODO Provide your actual implementation here based on your need specific to Oracle return false ; } // Map(): An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value. // This interface takes the place of the Dictionary class, which was a totally abstract class rather than an interface. @Override public Map < String , String > getListOfAllCrunchifyRecords ( ) { // TODO Provide your actual implementation here based on your need specific to Oracle return null ; } @Override public boolean updateCrunchifyRecord ( UUID id , Map < String , String > records ) { // TODO Provide your actual implementation here based on your need specific to Oracle return false ; } } |
Wskazówka 4.
W podobny sposób można użyć tego samego interfejsu do zaimplementowania różnych operacji specyficznych dla bazy danych. Na przykład dla DB2, MySQL, MongoDB, Cassandra DB itp.

Co dalej?
W trakcie pisania samouczka o klasie abstrakcyjnej, a następnie kolejnego samouczka, który wyraźnie pokazuje różnicę między klasą abstrakcyjną a interfejsem.