Когда вы создаете суперкласс, который должен быть расширен (обычно абстрактным) много раз, ему не обязательно использовать некоторые из методов в нем, только подклассы, это проще всего показать с помощью пример:
public abstract class GameObject {
public abstract void render(Graphics g);
}
это суперкласс, сейчас у него только один метод render
. этот суперкласс может иметь множество подклассов.
public class GameObject1 extends GameObject {
@Override
public void render(Graphics g) {
g.drawsomething();
}
}
подклассы ^ ^ vv
public class GameObject2 extends GameObject {
@Override
public void render(Graphics g) {
g.drawsomethingelse();
}
}
было бы проще составить много списков для каждый отдельный тип подкласса или сделать что-то вроде этого:
List<GameObject> objects = new ArrayList<GameObject>();
public void renderEverything(Graphics g) {
for(GameObject o : objects)
o.render(g);
}
второй пример намного проще и быстрее, чем создание тонны списков для каждого типа подкласса