Не могу вызвать метод экземпляра производного внутреннего класса - PullRequest
0 голосов
/ 08 июля 2019
public class A extends Q implements T {
   public class B extends Z {
      public void D(int A, int B) {
      }
   }
   private Z z;
   public A() {
     // other stuff
     z = new B(/** params **/);
     // more stuff
   }
   void C () {
      ((B)z).D(2,3);
   }
}

Код структурирован так (не могу дать полный фрагмент по юридическим причинам). Когда я пытаюсь вызвать D, я получаю сообщение об ошибке символа не найдено из компилятора Java. Z, Q и T определены в разных файлах и они do компилируются без ошибок.

1 Ответ

0 голосов
/ 08 июля 2019

Хорошо, если у вас есть автомобиль класса (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);
    }
}

Который отлично работает

...