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

时间:2019-07-08 08:00:26

标签: java inner-classes

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 :(得分:0)

好的,如果您有一辆Z型轿车和一辆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);
    }
}

哪个工作得很好