Odpowiedzi:
Oczywiście.
Zadeklarowanie klasy abstrakcyjnej oznacza tylko, że nie zezwalasz na jej samodzielne tworzenie instancji.
Zadeklarowanie abstrakcyjnej metody oznacza, że podklasy muszą zapewniać implementację dla tej metody.
Te dwa pojęcia są oddzielnymi koncepcjami, chociaż oczywiście nie można mieć metody abstrakcyjnej w klasie nieabstrakcyjnej. Możesz nawet mieć klasy abstrakcyjne z final
metodami, ale nigdy na odwrót.
Tak, możesz to zrobić. Dlaczego po prostu nie spróbujesz tego zrobić?
Tak, możesz. Klasa abstrakcyjna używana w Javie oznacza, że nie można utworzyć obiektu tej klasy. I abstrakcyjna metoda, której podklasy muszą zapewniać implementację dla tej metody.
Możesz więc łatwo zdefiniować klasę abstrakcyjną bez żadnej metody abstrakcyjnej.
Jak na przykład :
public abstract class AbstractClass{
public String nonAbstractMethodOne(String param1,String param2){
String param = param1 + param2;
return param;
}
public static void nonAbstractMethodTwo(String param){
System.out.println("Value of param is "+param);
}
}
Jest okej.
TAK Możesz stworzyć klasę abstrakcyjną bez żadnej metody abstrakcyjnej najlepszym przykładem klasy abstrakcyjnej bez metody abstrakcyjnej jest HttpServlet
Metoda abstrakcyjna to metoda, która nie ma treści. Jeśli zadeklarowałeś przynajmniej jedną metodę w klasie, klasa musi być zadeklarowana jako abstrakcja jest obowiązkowa, ALE jeśli zadeklarowałeś klasę abstrakcyjną, nie jest obowiązkowe zadeklarowanie metody abstrakcyjnej wewnątrz klasy.
Nie można tworzyć obiektów klasy abstrakcyjnej, co oznacza, że nie można ich utworzyć.
Tak, możesz zadeklarować klasę, której nie możesz utworzyć samodzielnie, używając tylko metod, które mają już implementacje. Byłoby to przydatne, gdybyś chciał w przyszłości dodać metody abstrakcyjne lub jeśli nie chcesz, aby klasa była tworzona bezpośrednio, mimo że nie ma ona właściwości abstrakcyjnych.
tak, możemy zadeklarować klasę abstrakcyjną bez żadnej metody abstrakcyjnej. celem deklarowania klasy jako abstrakcyjnej nie jest utworzenie instancji klasy.
więc dwa przypadki
1) klasa abstrakcyjna z metodami abstrakcyjnymi.
tego typu klasy, musimy odziedziczyć klasę z tej klasy abstrakcyjnej i musimy nadpisać metody abstrakcyjne w naszej klasie, np .: klasa GenricServlet
2) klasa abstrakcyjna bez metod abstrakcyjnych.
tego typu klasy, musimy odziedziczyć klasę z tej klasy abstrakcyjnej, np .: klasa HttpServlet celem wykonania jest to, że jeśli nie zaimplementujesz logiki w klasie potomnej, możesz uzyskać logikę nadrzędną
Tak, możemy mieć klasę abstrakcyjną bez metod abstrakcyjnych, ponieważ obie są niezależnymi koncepcjami. Zadeklarowanie abstrakcji klasy oznacza, że nie można jej samodzielnie utworzyć instancji i można ją jedynie podzielić na podklasy. Zadeklarowanie abstrakcyjnej metody oznacza, że Method zostanie zdefiniowana w podklasie.
Tak, możesz to zrobić.
zadeklarowanie klasy abstrakcyjnej oznacza, że żadna inna klasa nie utworzy instancji klasy.
i powinna być w niej co najmniej jedna metoda abstrakcyjna, a znaczenie tego możesz zadeklarować metodę abstrakcyjną w tej klasie, jeśli nie deklarujesz metody niż jest w porządku.
przykład:
public abstract class abs {
protected int cx = 0, cy = 0;
public void p() {
System.out.print("hello");
}
}
to na pewno zadziała.
Tak, możesz. Czasami możesz otrzymać pytanie, jaki jest cel tego działania? Odpowiedź brzmi: czasami musimy ograniczyć klasę do samodzielnego tworzenia instancji. W takim przypadku chcemy, aby użytkownik rozszerzył naszą klasę Abstract i utworzył instancję klasy potomnej
Tak, możesz zdefiniować klasę abstrakcyjną bez metody abstrakcyjnej. Jeśli jednak w środku nie ma metody, lepiej użyj interfejsu
Możesz, myślę, że bardziej powinieneś. Od samego początku powiem, że nie ma twardej i szybkiej odpowiedzi. Zrób właściwą rzecz w swojej obecnej sytuacji.
Dla mnie dziedziczenie oznacza związek „jest-jest”. Wyobraź sobie klasę psów, którą można rozszerzyć o bardziej wyspecjalizowane podtypy (alzacki, pudel itp.). W tym przypadku stworzenie abstrakcyjnej klasy psów może być właściwe, ponieważ podtypy to psy. Teraz wyobraźmy sobie, że psy potrzebują obroży. W tym przypadku dziedziczenie nie ma sensu: nonsensem jest utrzymywanie relacji „jest-a” między psami a obrożami. Jest to z pewnością relacja „ma-a”, kołnierz jest przedmiotem współpracy. Tworzenie abstrakcyjnych obroży tylko po to, aby psy mogły ją mieć, nie ma sensu.
Często stwierdzam, że klasy abstrakcyjne bez metod abstrakcyjnych w rzeczywistości wyrażają relację typu „ma”. W takich przypadkach zwykle okazuje się, że kod można lepiej rozłożyć na czynniki bez stosowania dziedziczenia. Uważam również, że klasy abstrakcyjne bez metody abstrakcyjnej są często zapachem kodu i przynajmniej powinny prowadzić do zadawania pytań podczas przeglądu kodu.
Ponownie, jest to całkowicie subiektywne. Mogą zaistnieć sytuacje, w których klasa abstrakcyjna bez metod abstrakcyjnych ma sens, zależy to wyłącznie od interpretacji i uzasadnienia. Podejmij najlepszą decyzję niezależnie od tego, nad czym pracujesz.
Właściwie nie ma żadnego znaczenia, jeśli klasa abstrakcyjna nie ma żadnej metody abstrakcyjnej. Klasa abstrakcyjna jest jak ojciec. Ten ojciec ma pewne cechy i zachowania, kiedy ty jako dziecko chcesz być dzieckiem ojca, ojciec mówi, że dziecko (ty) musi być takie, to nasze MOTO, a jeśli nie chcesz, to ty nie są moim dzieckiem.
WindowDecorator
iCoffeeDecorator
sąabstract
klasami, ale żadna nie zawieraabstract
metody.