Dlaczego klasy Java nie mogą zawierać abstrakcyjnych pól, ponieważ mogą zawierać abstrakcyjne metody?Dlaczego nie abstrakcyjne pola?
Na przykład: Mam dwie klasy, które rozszerzają tę samą abstrakcyjną klasę podstawową. Każda z tych dwóch klas ma metodę, która jest identyczna, z wyjątkiem stałej String, która w tym przypadku jest komunikatem o błędzie. Jeśli pola mogłyby być abstrakcyjne, mógłbym uczynić to stałym abstraktem i przenieść metodę do klasy bazowej. Zamiast tego, muszę utworzyć abstrakcyjną metodę o nazwie getErrMsg()
w tym przypadku, która zwraca String, nadpisuje tę metodę w dwóch klasach pochodnych, a następnie mogę wywołać metodę (która teraz nazywa metodę abstrakcyjną).
Dlaczego nie mogę po prostu zrobić tego streszczenia na początek? Czy Java mogła zostać zaprojektowana, aby to umożliwić?
Wygląda na to, że mógłbyś pominąć cały ten problem, czyniąc pole niestałym i po prostu dostarczając wartość przez konstruktor, kończąc na 2 wystąpieniach jednej klasy zamiast 2 klas. – Nate
Tworząc pola abstrakcyjne w super klasie, masz określone, że każda podklasa musi mieć to pole, więc nie różni się to od pola nie abstrakcyjnego. –
@peter, nie jestem pewien, czy podążam za twoim punktem. jeśli w klasie abstrakcyjnej określono stałą nie abstrakcyjną, to jej wartość jest stała również dla wszystkich podklas. jeśli byłaby abstrakcyjna, to jego wartość musiałaby zostać wdrożona/dostarczona przez każdą podklasę. więc nie byłoby to w ogóle takie samo. – liltitus27