/ / Czy streszczenie i nadklasa jest możliwa i sensowna? - java

Czy to możliwe i znaczące, aby nadklasowa była abstrakcyjna? - java

Powiedziano mi, że: klasa może rozszerzyć konkretną nadklasę i zastąpić zaimplementowaną metodę, aby uczynić ją abstrakcyjną.

Jeśli metoda stanie się abstrakcyjna, odpowiednia nadklasa również powinna stać się abstrakcyjna.

Czy to jest poprawne? Jeśli tak, czy sensowne jest uczynienie nadklasy lub metody w niej nadrzędnej, aby stała się abstrakcyjna?

Odpowiedzi:

0 dla odpowiedzi № 1

Aby zawierać metody abstrakcyjne, samą klasę należy również uznać za abstrakcyjną.

Tam, gdzie jest zachowanie, można zastosować metody abstrakcyjnespecyficzne dla każdego obiektu podklasy. Chociaż można to również osiągnąć za pomocą interfejsów, możesz preferować użycie klasy abstrakcyjnej, ponieważ mogą one również zawierać już zaimplementowane metody, lub możesz zadeklarować pola, które nie są statyczny i finał. Uwaga: gdy klasa staje się abstrakcyjna, nie można jej już tworzyć.

Przeczytaj więcej o klasach abstrakcyjnych tutaj.


0 dla odpowiedzi nr 2

Niezależnie od tego, czy uczynisz swoją klasę abstrakcyjną, jeśli zawiera metody abstrakcyjne, nie jest wyborem, jest koniecznością. ty nie może mieć klasy nieabstrakcyjnej, która ma metody abstrakcyjne.

Czy powinieneś zadeklaruj metodę jako streszczenie lub wdrożyć go w swojej superklasie sprowadza się doTwój konkretny przypadek użycia. Czy istnieje domyślne zachowanie, które ma sens dla wszystkich możliwych konkretnych implementacji superklasy? Następnie możesz go zaimplementować. Jeśli tak nie jest, zadeklaruj to jako streszczenie i pozwól, aby podklasy przejęły kontrolę.


0 dla odpowiedzi № 3

Powiedziano mi, że: klasa może rozszerzyć konkretną nadklasę i zastąpić zaimplementowaną metodę, aby uczynić ją abstrakcyjną.

Jeśli metoda stanie się abstrakcyjna, odpowiednia nadklasa również powinna stać się abstrakcyjna.

Czy to jest poprawne?

Myślę, że to niepoprawne.

Weźmy na przykład następujący kod.

public class Father {
public void print() {
System.out.println("Father");
}
}

public abstract class Son extends Father {
@Override
public abstract void print(); /* no need to abstract the superclass */

// and other abstract or concrete methods
}

public class Grandson extends Son {
@Override
public void print() {
System.out.println("Grandson");
}
}