无法调用派生内部 class 的实例方法

Can't call instance method of derived inner class

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 在不同的文件中定义,它们 编译没有错误。

好的,如果您有一辆 class 车辆 (Z) 和一辆 class 卡车 (B),它也是一辆车辆但可以装载货物 (D)。然后,如果我们知道我们有任何车辆 (z) 并且我们只是假设它是一辆卡车 ( (B z) ),我们无法确定它是否真的可以附加货物,因为我们只是假设它是一辆卡车 (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);
    }
}

效果很好