Główną ideę klasy abstrakcyjnej zawiera następująca teza: czasami nie są wymagane klasy gotowe, ale w formie „surowej”. Takich ustawień wstępnych nie można bezpośrednio używać (tworzyć instancji).
Co to jest klasa abstrakcyjna w Javie
Spójrzmy na inny przykład.W Javie w pakiecie Java.util znajduje się abstrakcyjna klasa Calendar. Nie implementuje konkretnego kalendarza, który jest używany na przykład w Europie Zachodniej i Wschodniej, Chinach, Korei Północnej, Tajlandii itp. Ale ma wiele przydatnych funkcji, na przykład dodanie kilku dni do określonej daty: te funkcje są wymagane do każdej realizacji kalendarza. Nie można odrodzić instancji z klasy abstrakcyjnej.
Klasy abstrakcyjne, abstrakcyjne metody Java
Powiedzmy, że musisz opracować kilka grafikelementy, na przykład kształty geometryczne: koło, prostokąt, gwiazda itp. I jest pojemnik, który je rysuje. Każdy komponent ma inny wygląd, więc odpowiednia metoda (nazwijmy ją paint) jest implementowana inaczej. Jednak każdy komponent ma wiele wspólnego: kształty muszą być wpisane w prostokąt, mogą mieć kolor, być widoczne i niewidoczne itp. Oznacza to, że musisz utworzyć klasę nadrzędną dla wszystkich tych kształtów, gdzie każdy komponent odziedziczy wspólne właściwości.
Jeśli klasa ma metody abstrakcyjne, toklasa jest abstrakcyjna. Słowo kluczowe abstract jest umieszczane przed słowem klasy, a także w nagłówku metody. Po tytule takiej metody należy umieścić średnik. W Javie nie można utworzyć instancji klasy abstrakcyjnej. Jeśli chcemy zabronić ich tworzenia, nawet jeśli klasa nie ma metod abstrakcyjnych, to można ją zadeklarować jako abstrakcyjną. Ale jeśli klasa ma co najmniej jedną metodę abstrakcyjną, to klasa musi być abstrakcyjna. Niemożliwe jest, aby klasa była abstrakcyjna i ostateczna, a także metoda. Metoda nie może być abstrakcyjna, prywatna, statyczna ani natywna. Aby odziedziczone klasy zostały zadeklarowane jako nieabstrakcyjne i utworzone za pomocą instancji, muszą zaimplementować wszystkie abstrakcyjne metody rodzica. Sama klasa może używać swoich metod abstrakcyjnych.
Przykład:
- abstract class AClass {
- publiczna abstrakcyjna metoda void (int a);
- }
- klasa BClass rozszerza AClass {
- public void method (int a) {
- // body
- }
Dozwolone są zmienne typu klasy abstrakcyjnej. Mogą odnosić się do nieabstrakcyjnego potomka tej klasy lub mieć wartość null.
Interfejsy Java - alternatywa dla dziedziczenia wielokrotnego
W Javie nie ma dziedziczenia wielokrotnego, ponieważ wtedy pojawiają się pewne problemy. Klasa nie może dziedziczyć z wielu klas. Ale może implementować kilka interfejsów.
Interfejsy Java i klasy abstrakcyjne - pojęciapodobne, ale nie to samo. Interfejs można zadeklarować jako publiczny, wtedy jest dostępny dla wszystkich lub można pominąć modyfikator public, wtedy interfejs jest dostępny tylko w swoim pakiecie. Słowo kluczowe abstract nie jest wymagane, ponieważ interfejs jest już abstrakcyjny, ale można je określić.
Deklaracja interfejsu
Zaczyna się od tytułu i może być pierwszysłowo kluczowe public, po którym następuje słowo interfejsu. Następnie słowo się rozciąga i może pochodzić wyliczenie interfejsów, z których dany jest dziedziczony. W tym przypadku powtórzenia są niedozwolone, a relacja dziedziczenia nie może również tworzyć zależności cyklicznej. Następnie pojawia się korpus interfejsu, ujęty w nawiasy klamrowe. Elementy są zadeklarowane w treści interfejsu: pola stałe i metody abstrakcyjne. Wszystkie pola to public final static - wszystkie te modyfikatory są opcjonalne. Wszystkie metody są uważane za publiczne abstrakcyjne - można również określić te modyfikatory. Dość już powiedziano o różnicy między klasą abstrakcyjną a interfejsem Java.
- publiczny interfejs AI rozszerza B, C, D {
- // body
- }
Aby zadeklarować klasę jako dziedziczącą z interfejsu, użyj słowa kluczowego implements:
- klasa AClass implementuje BI, CI, DI {}
Oznacza to, że jeśli nazwa interfejsu jest określona po implementacji w deklaracji klasy, klasa ją implementuje. Spadkobiercy tej klasy dziedziczą jej elementy, więc też ją implementują.
Dozwolone są również zmienne interfejsu.Mogą odnosić się do typu klasy implementującej ten interfejs lub null. Takie zmienne mają wszystkie elementy klasy Object, ponieważ obiekty pochodzą z klas, a te z kolei są dziedziczone z klasy Object.
W tym artykule przyjrzeliśmy się niektórym elementom modelu obiektowego Java - klasom abstrakcyjnym, metodom abstrakcyjnym, interfejsom.