簡體   English   中英

無法調用派生內部類的實例方法

[英]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在不同的文件中定義,並且確實可以編譯而不會出錯。

好的,如果您有一類車輛(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);
    }
}

哪個工作得很好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM