Co to jest „klasa abstrakcyjna” w Javie?
java
oop
interface
abstract-class
Ravindra babu
źródło
źródło
Odpowiedzi:
Klasa abstrakcyjna to klasa, której nie można utworzyć. Klasa abstrakcyjna jest używana przez tworzenie dziedziczącej podklasy, którą można utworzyć. Klasa abstrakcyjna wykonuje kilka czynności dla dziedziczącej podklasy:
Oto przykład:
Zauważ, że „abstractMethod ()” nie ma treści żadnej metody. Z tego powodu nie można wykonać następujących czynności:
Nie ma metody, która implementuje
abstractMethod()
! Dlatego JVM nie może wiedzieć, co ma zrobić, gdy coś się stanienew ImplementingClass().abstractMethod()
.Oto poprawne
ImplementingClass
.Zauważ, że nie musisz definiować
implementedMethod()
anifinalMethod()
. Zostały już zdefiniowane przezAbstractClass
.Oto kolejna poprawna
ImplementingClass
.W tym przypadku zostało zastąpione
implementedMethod()
.Jednak ze względu na
final
słowo kluczowe nie jest możliwe.Nie możesz tego zrobić, ponieważ implementacja
finalMethod()
inAbstractClass
jest oznaczona jako ostateczna implementacjafinalMethod()
: żadne inne implementacje nie będą dozwolone.Teraz możesz także dwukrotnie zaimplementować klasę abstrakcyjną:
Teraz gdzieś możesz napisać inną metodę.
Należy zauważyć, że chociaż ogłosił
b
toAbstractClass
typ, wyświetla"Overriden!"
. Wynika to z faktu, że obiekt, który utworzyliśmy, był w rzeczywistości obiektemImplementingClass
, któryimplementedMethod()
oczywiście jest przesłonięty. (Być może widzieliście to jako polimorfizm).Jeśli chcemy uzyskać dostęp do członka określonego dla konkretnej podklasy, musimy najpierw przejść do tej podklasy:
Wreszcie nie można wykonać następujących czynności:
Jednorazowo można przedłużyć tylko jedną klasę. Jeśli chcesz rozszerzyć wiele klas, muszą to być interfejsy. Możesz to zrobić:
Oto przykładowy interfejs:
Jest to w zasadzie to samo, co:
Jedyną różnicą jest to, że drugi sposób nie pozwala kompilatorowi wiedzieć, że tak naprawdę jest interfejsem. Może to być przydatne, jeśli chcesz, aby ludzie implementowali tylko Twój interfejs, a nie innych. Jednak jako ogólna zasada dla początkujących, jeśli twoja klasa abstrakcyjna ma tylko metody abstrakcyjne, prawdopodobnie powinieneś uczynić ją interfejsem.
Następujące działania są nielegalne:
Nie można zaimplementować metod w interfejsie. Oznacza to, że jeśli zaimplementujesz dwa różne interfejsy, różne metody w tych interfejsach nie będą kolidować. Ponieważ wszystkie metody w interfejsie są abstrakcyjne, musisz zaimplementować metodę, a ponieważ twoja metoda jest jedyną implementacją w drzewie dziedziczenia, kompilator wie, że musi użyć twojej metody.
źródło
c.implementedMethod()
drukować „ Przesłonięcie !”?SecondImplementingClass
nie zastępujeimplementedMethod()
.Klasa Java staje się abstrakcyjna pod następującymi warunkami:
1. Co najmniej jedna z metod jest oznaczona jako abstrakcyjna:
W takim przypadku kompilator zmusza do oznaczenia całej klasy jako abstrakcyjnej.
2. Klasa jest oznaczona jako abstrakcyjna:
Jak już powiedziano: jeśli masz metodę abstrakcyjną, kompilator zmusza cię do oznaczenia całej klasy jako abstrakcyjnej. Ale nawet jeśli nie masz żadnej metody abstrakcyjnej, nadal możesz oznaczyć klasę jako abstrakcyjną.
Wspólne zastosowanie:
Powszechnym zastosowaniem klas abstrakcyjnych jest zapewnienie zarysu klasy podobnej do interfejsu. Jednak w przeciwieństwie do interfejsu może on już zapewniać funkcjonalność, tzn. Niektóre części klasy są zaimplementowane, a niektóre są po prostu opisane w deklaracji metody. ("abstrakcyjny")
Nie można utworzyć instancji klasy abstrakcyjnej, ale można utworzyć konkretną klasę na podstawie klasy abstrakcyjnej, którą można następnie utworzyć. Aby to zrobić, musisz odziedziczyć klasę abstrakcyjną i zastąpić metody abstrakcyjne, tj. Zaimplementować je.
źródło
abstract
słowo kluczowe jest wszystkim, co jest konieczne, aby klasa była abstrakcyjna. Ale konkretna klasa nie może zawieraćabstract
metody . Dlatego jeśli twoja klasa maabstract
metodę, musi zostać zadeklarowana jakoabstract
kompilator dla kompilatora.Klasa zadeklarowana za pomocą abstrakcyjnego słowa kluczowego jest znana jako
abstract class
. Abstrakcja to proces ukrywania szczegółów implementacji danych i pokazywania użytkownikowi tylko funkcjonalności. Abstrakcja pozwala skupić się na tym, co robi obiekt, a nie na tym, jak to robi.Główne rzeczy klasy abstrakcyjnej
Klasa abstrakcyjna może zawierać metody abstrakcyjne lub nie. Mogą być metody nieabstrakcyjne.
Metoda abstrakcyjna to metoda zadeklarowana bez implementacji (bez nawiasów klamrowych, po której następuje średnik), jak poniżej:
np .:
abstract void moveTo(double deltaX, double deltaY);
Jeśli klasa ma co najmniej jedną metodę abstrakcyjną, klasa ta musi być abstrakcyjna
Klasy abstrakcyjne nie mogą być tworzone (nie wolno tworzyć obiektów klasy abstrakcyjnej)
Aby użyć klasy abstrakcyjnej, musisz odziedziczyć ją po innej klasie. Zapewnij implementacje do wszystkich zawartych w nim metod abstrakcyjnych.
Jeśli odziedziczysz klasę abstrakcyjną, musisz zapewnić implementacje wszystkich zawartych w niej metod abstrakcyjnych.
Zadeklaruj klasę abstrakcyjną Podanie
abstract
słowa kluczowego przed klasą podczas deklaracji czyni ją abstrakcyjną. Spójrz na poniższy kod:Zadeklaruj metodę abstrakcyjną Podanie
abstract
słowa kluczowego przed metodą podczas deklaracji czyni ją abstrakcyjną. Spójrz na poniższy kod,Dlaczego potrzebujemy abstrakcyjnych klas
W zorientowanej obiektowo aplikacji do rysowania możesz rysować koła, prostokąty, linie, krzywe Beziera i wiele innych obiektów graficznych. Wszystkie te obiekty mają wspólne wspólne stany (na przykład: położenie, orientacja, kolor linii, kolor wypełnienia) i zachowania (na przykład: moveTo, obracanie, zmiana rozmiaru, rysowanie). Niektóre z tych stanów i zachowań są takie same dla wszystkich obiektów graficznych (np. Kolor wypełnienia, pozycja i moveTo). Inne wymagają innej implementacji (np. Zmiana rozmiaru lub losowanie). Wszystkie obiekty graficzne muszą mieć możliwość rysowania lub zmiany rozmiaru, różnią się jedynie sposobem, w jaki to robią.
To idealna sytuacja dla abstrakcyjnej nadklasy. Możesz skorzystać z podobieństw i zadeklarować wszystkie obiekty graficzne do dziedziczenia z tego samego abstrakcyjnego obiektu nadrzędnego (np.:),
GraphicObject
Jak pokazano na poniższym rysunku.Najpierw deklarujesz klasę abstrakcyjną
GraphicObject
, aby zapewnić zmienne składowe i metody, które są w pełni współdzielone przez wszystkie podklasy, takie jak bieżąca pozycja i metoda moveTo.GraphicObject
zadeklarował również metody abstrakcyjne, takie jak rysowanie lub zmiana rozmiaru, które muszą być zaimplementowane przez wszystkie podklasy, ale muszą być zaimplementowane na różne sposoby.GraphicObject
Klasa może wyglądać następująco:Zastosowanie metody abstrakcyjnej w podklasach Każda nie abstrakcyjna podklasa
GraphicObject
, taka jakCircle
iRectangle
, musi zapewniać implementacje dla metoddraw
iresize
.Wewnątrz
main
metody możesz wywołać wszystkie takie metody:Sposoby osiągnięcia abstrakcji w Javie
Istnieją dwa sposoby osiągnięcia abstrakcji w java
Klasa abstrakcyjna z konstruktorami, elementami danych, metodami itp
Wynik:
Pamiętaj o dwóch zasadach:
Jeśli klasa ma kilka metod abstrakcyjnych i kilka konkretnych metod, zadeklaruj ją jako
abstract
klasę.Jeśli klasa ma tylko abstrakcyjne metody, zadeklaruj ją jako
interface
.Bibliografia:
źródło
Jest to klasa, której nie można utworzyć instancji, i zmusza implementację klas do ewentualnego wdrożenia abstrakcyjnych metod, które określa.
źródło
Mówiąc najprościej, możesz myśleć o klasie abstrakcyjnej jak o interfejsie z nieco większymi możliwościami.
Nie można utworzyć instancji interfejsu, który dotyczy również klasy abstrakcyjnej.
W interfejsie możesz po prostu zdefiniować nagłówki metod, a WSZYSTKIE implementatory są zmuszone do implementacji wszystkich . W klasie abstrakcyjnej możesz również zdefiniować nagłówki metody, ale tutaj - w odróżnieniu od interfejsu - możesz także zdefiniować treść (zwykle domyślną implementację) metody. Ponadto, gdy inne klasy rozszerzają (uwaga, nie implementuj, a zatem możesz mieć tylko jedną klasę abstrakcyjną na klasę podrzędną) swoją klasę abstrakcyjną, nie są zmuszone do implementacji wszystkich metod klasy abstrakcyjnej, chyba że podasz metodę abstrakcyjną ( w takim przypadku działa jak w przypadku interfejsów, nie można zdefiniować treści metody).
W przeciwnym razie w przypadku normalnych metod klasy abstrakcyjnej „dziedziczący” mogą po prostu użyć domyślnego zachowania lub go zastąpić, jak zwykle.
Przykład:
źródło
Z dokumentacji wyroczni
Metody i klasy abstrakcyjne:
Metoda abstrakcyjna to metoda zadeklarowana bez implementacji (bez nawiasów klamrowych, po której następuje średnik), jak poniżej:
Jeśli klasa zawiera metody abstrakcyjne, sama klasa musi zostać zadeklarowana jako abstrakcyjna, jak w:
Kiedy klasa abstrakcyjna jest podklasowana, podklasa zwykle zapewnia implementacje dla wszystkich metod abstrakcyjnych w swojej klasie nadrzędnej. Jeśli jednak tak nie jest, podklasę należy również uznać za abstrakcyjną .
Ponieważ
abstract classes
iinterfaces
są powiązane, spójrz na poniższe pytania SE:Jaka jest różnica między interfejsem a klasą abstrakcyjną?
Jak powinienem wyjaśnić różnicę między interfejsem a klasą abstrakcyjną?
źródło
Uzyskaj odpowiedzi tutaj:
Klasa abstrakcyjna vs Interfejs w Javie
Czy klasa abstrakcyjna może mieć ostateczną metodę?
BTW - to są pytania, które zadałeś ostatnio. Pomyśl o nowym pytaniu, aby zbudować reputację ...
Edytować:
Właśnie zdałem sobie sprawę, że plakaty tego i odnośników mają taką samą lub przynajmniej podobną nazwę, ale identyfikator użytkownika jest zawsze inny. Tak więc albo istnieje problem techniczny, że keyur ma problemy z ponownym zalogowaniem się i znalezieniem odpowiedzi na swoje pytania, lub jest to rodzaj gry zapewniającej rozrywkę społeczności SO;)
źródło
Mały dodatek do wszystkich tych postów.
źródło
Klasa abstrakcyjna nie może być bezpośrednio utworzona, ale musi być pochodną, aby była użyteczna. Klasa MUSI być abstrakcyjna, jeśli zawiera metody abstrakcyjne: albo bezpośrednio
lub pośrednio
Jednak klasa może być abstrakcyjna bez zawierania metod abstrakcyjnych. Jest to sposób na zapobieganie bezpośredniej instancji, np
Ten ostatni styl klas abstrakcyjnych można wykorzystać do tworzenia klas „podobnych do interfejsu”. W przeciwieństwie do interfejsów klasa abstrakcyjna może zawierać nieabstrakcyjne metody i zmienne instancji. Możesz użyć tego, aby zapewnić podstawową funkcjonalność rozszerzania klas.
Innym częstym wzorcem jest implementacja głównej funkcjonalności w klasie abstrakcyjnej i zdefiniowanie części algorytmu w metodzie abstrakcyjnej, która ma zostać zaimplementowana przez rozszerzającą się klasę. Głupi przykład:
źródło
Rozwiązanie - klasa podstawowa (abstrakt)
źródło
Klasa abstrakcyjna to klasa, która jest zadeklarowana jako abstrakcyjna - może zawierać metody abstrakcyjne lub nie. Klasy abstrakcyjne nie mogą być tworzone, ale można je podklasować.
Innymi słowy, klasa zadeklarowana za pomocą abstrakcyjnego słowa kluczowego jest znana w Javie jako klasa abstrakcyjna. Może mieć metody abstrakcyjne (metoda bez ciała) i metody nieabstrakcyjne (metoda z ciałem).
Ważna uwaga: - Klasy abstrakcyjne nie mogą być używane do tworzenia instancji obiektów, można ich używać do tworzenia odwołań do obiektów, ponieważ podejście Javy do polimorfizmu w czasie wykonywania jest implementowane za pomocą odwołań do nadklasy. Dlatego musi istnieć możliwość utworzenia odwołania do klasy abstrakcyjnej, aby można było jej użyć do wskazania obiektu podklasy. Zobaczysz tę funkcję w poniższym przykładzie
źródło
Klasa abstrakcyjna to klasa, która nie jest w pełni zaimplementowana, ale zapewnia coś w rodzaju schematu dla podklas. Może być częściowo zaimplementowany, ponieważ zawiera w pełni zdefiniowane konkretne metody, ale może także zawierać metody abstrakcyjne. Są to metody z podpisem, ale bez treści metody. Każda podklasa musi definiować treść dla każdej metody abstrakcyjnej, w przeciwnym razie również musi zostać uznana za abstrakcyjną. Ponieważ klasy abstrakcyjne nie mogą być tworzone, muszą zostać rozszerzone o co najmniej jedną podklasę, aby można je było wykorzystać. Pomyśl o klasie abstrakcyjnej jak o klasie ogólnej, a podklasy służą do uzupełnienia brakujących informacji.
źródło
Klasa, która może mieć zarówno metody betonowe, jak i nie-konkretne, tj. Z ciałem i bez.
źródło
Nic nie robi, wystarczy podać wspólny szablon, który zostanie udostępniony dla jego podklasy
źródło