Чтобы быстро ответить на ваш вопрос: да, подкласс можно назначать практически везде, где идет суперкласс.
Причины этого связаны с наследованием и объектно-ориентированным программированием. Позвольте привести пример. Давайте подумаем о поездах и железнодорожных вагонах, которые являются частью поезда.
Суперкласс - это RailwayCar . Каждый железнодорожный вагон имеет вес.
public class RailwayCar {
private int weight;
public RailwayCar() {
}
public RailwayCar(int weight) {
setWeight(weight);
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public void arriveAtStation(Station station) {}
public void leaveStation(Station station) {}
}
Это просто базовая c машина. Однако есть специальные автомобили.
// Engines have power in addition to weight
public class Engine extends RailwayCar {
private int power;
public Engine(int weight, int power) {
super(weight);
setPower(power);
}
public void setPower(int power) {
this.power = power;
}
public int getPower() {
return power;
}
}
Есть и другие типы автомобилей. Например, например, может быть пассажирский вагон, где вес может меняться на каждой станции, когда пассажиры входят и выходят. Есть определенные c типы автомобилей для определенных c типов автомобилей go. LogCar будет содержать длинные журналы.
Все эти подклассы RailwayCar могут переопределять методы станции (receiveAtStation () и leftStation ()) для выполнения определенных c действий путем переопределения этих методов.
Все эти автомобили могут быть помещены в один список или массив. Например, RailwayCar [] вагоны или List cars = new ArrayList <> ();