Хорошо, если у вас есть автомобиль класса (Z) и грузовик класса (B), который также является транспортным средством, но может прикрепить Карго (D). Тогда, если мы знаем, что у нас есть какое-либо транспортное средство (z), и мы просто предполагаем, что это грузовик ((B z)), мы не можем точно знать, может ли он на самом деле присоединить Cargo, так как мы просто предполагали, что это грузовик (B). Что вы могли бы сделать, это создать конструктор, который принимает автомобиль (Z) и строит грузовик (B) из предоставленной информации. Этот новый грузовик можно рассматривать как транспортное средство, поскольку он один, но, поскольку мы знаем, что это грузовик, мы также можем относиться к нему как к грузовику:
class AClass extends Q implements T
{
class B extends Z
{
boolean CargoAttached;
public B()
{
}
public B(Z z)
{
CargoAttached = false;
}
public void D(int A, int B)
{
}
}
private Z z = new Z();
void C()
{
z = (new B(z));
((B) z).D(1, 2);
}
}
Который отлично работает