Co to jest klasa abstrakcyjna w PHP?
Jak można to wykorzystać?
php
oop
abstract-class
udaya
źródło
źródło
Odpowiedzi:
Klasa abstrakcyjna to klasa, która zawiera co najmniej jedną metodę abstrakcyjną, czyli metodę bez żadnego rzeczywistego kodu, tylko nazwę i parametry, i która została oznaczona jako „abstrakcyjna”.
Ma to na celu zapewnienie pewnego rodzaju szablonu do dziedziczenia i wymuszenia na klasie dziedziczącej implementacji metod abstrakcyjnych.
Klasa abstrakcyjna jest więc czymś pomiędzy klasą zwykłą a czystym interfejsem. Również interfejsy są szczególnym przypadkiem klas abstrakcyjnych, w których WSZYSTKIE metody są abstrakcyjne.
Więcej informacji znajdziesz w tej sekcji podręcznika PHP.
źródło
1. Nie można utworzyć instancji klasy abstrakcyjnej : nie można tworzyć instancji klas zdefiniowanych jako abstrakcyjne, a każda klasa zawierająca co najmniej jedną metodę abstrakcyjną musi być również abstrakcyjna.
Przykład poniżej:
2. Każda klasa, która zawiera co najmniej jedną metodę abstrakcyjną, musi być również abstrakcyjna : Klasa abstrakcyjna może zawierać metody abstrakcyjne i nieabstrakcyjne, ale musi zawierać co najmniej jedną metodę abstrakcyjną. Jeśli klasa ma co najmniej jedną metodę abstrakcyjną, wówczas klasa musi zostać zadeklarowana jako abstrakcyjna.
Przykład poniżej:
3. Metoda abstrakcyjna nie może zawierać treści : Metody zdefiniowane jako abstrakcyjne po prostu deklarują podpis metody - nie mogą definiować implementacji. Jednak implementację można zdefiniować za pomocą metody nieabstrakcyjnej.
4. W przypadku dziedziczenia z klasy abstrakcyjnej wszystkie metody oznaczone jako abstrakcyjne w deklaracji klasy rodzica muszą być zdefiniowane przez dziecko : Jeśli dziedziczysz klasę abstrakcyjną, musisz zapewnić implementacje dla wszystkich metod abstrakcyjnych w niej zawartych .
5. Taka sama (lub mniej ograniczona) widoczność : podczas dziedziczenia z klasy abstrakcyjnej wszystkie metody oznaczone jako abstrakcyjne w deklaracji klasy rodzica muszą być zdefiniowane przez dziecko; dodatkowo metody te muszą mieć taką samą (lub mniej ograniczoną) widoczność. Na przykład, jeśli metoda abstrakcyjna jest zdefiniowana jako chroniona, implementacja funkcji musi być zdefiniowana jako chroniona lub publiczna, ale nie prywatna.
6. Podpisy metod abstrakcyjnych muszą być zgodne : w przypadku dziedziczenia z klasy abstrakcyjnej wszystkie metody oznaczone jako abstrakcyjne w deklaracji klasy rodzica muszą być zdefiniowane przez dziecko, podpisy metod muszą być zgodne, tj. Podpowiedzi typu i liczba wymaganych argumenty muszą być takie same. Na przykład, jeśli klasa potomna definiuje opcjonalny argument, a podpis metody abstrakcyjnej go nie zawiera, nie ma konfliktu w podpisie.
7. Klasa abstrakcyjna nie obsługuje dziedziczenia wielokrotnego : Klasa abstrakcyjna może rozszerzać inną klasę abstrakcyjną. Klasa abstrakcyjna może zapewniać implementację interfejsu. Jednak nie obsługuje dziedziczenia wielokrotnego.
Poniższy przykład spowoduje błąd krytyczny: Nie znaleziono klasy „koń”
źródło
Jest dobre wyjaśnienie, że tutaj .
źródło
Klasa abstrakcyjna
1. Zawiera metodę abstrakcyjną
2. Nie można bezpośrednio zainicjować
3. Nie można utworzyć obiektu klasy abstrakcyjnej
4. Używane tylko do dziedziczenia
Metoda abstrakcyjna
1. Nie może zawierać treści
2. Nie może być zdefiniowana jako prywatna
3. Klasy potomne muszą definiować metody zadeklarowane w klasie abstrakcyjnej
Przykładowy kod:
Wynik:
źródło
źródło
Klasy abstrakcyjne to te klasy, których nie można bezpośrednio zainicjować. Innymi słowy, możemy powiedzieć, że klasy abstrakcyjne to te, których obiektu nie można utworzyć bezpośrednio. W PHP klasy abstrakcyjne są chronione słowem kluczowym abstract .
Aby stać się jedną klasą abstrakcyjną, jedna metoda klasy musi być abstrakcyjna.
Szczegóły dotyczące klasy abstrakcyjnej można znaleźć na moim blogu na temat klasy abstrakcyjnej w PHP .
źródło
Klasa abstrakcyjna jest jak zwykła klasa zawiera zmienne zawiera zmienne chronione funkcje zawiera konstruktor tylko jedna rzecz jest inna zawiera metodę abstrakcyjną.
Metoda abstrakcyjna oznacza metodę pustą bez definicji, więc tylko z jedną różnicą w klasie abstrakcyjnej nie możemy stworzyć obiektu klasy abstrakcyjnej
Streszczenie musi zawierać metodę abstrakcyjną, a metody te muszą być zdefiniowane w klasie dziedziczącej.
źródło