2012-06-21 44 views
-1

在我的Java應用程序,我想解決以下情形Java的層次和訪問級別

class C { 

} 

Class A extends C { 
    public A() { 
     B objB=new B(this); 
     objB.methodA(); 
    } 

    public void methodX() { 

    } 
} 

Class B { 
    private A objA; 
    public B(A a) { 
     objA=a; 
    } 
    public void methodA() { 
     objA.methodX() 
    } 
} 

是否有可能從B級調用的methodX()當我編譯代碼的objA(類B)只允許訪問C類方法?是否存在替代方式來解決上述情況? Plz幫助

+0

不知道你在問什麼。 A的methodX()應該在任何地方被調用,因爲它被聲明爲public – Raekye

+0

我將'this'作爲構造函數參數傳遞給B類,當它到達B類時它指向C類(超類)。 ????? –

+1

在構造函數中傳遞'this'的警告是,如果您嘗試調用它的方法,則可能無法完全初始化一個對象 – gobernador

回答

1

除了事實上你沒有任何意義,你正在嘗試做什麼以及代碼是否被修改,它在語義上沒有任何問題。我只是像下面一樣嘗試。

package com.test; 

public class So { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     A a = new A(); 
     B b = new B(a); 
     b.methodA(); 

    } 

} 

class A extends C { 

    public A() { 

     B objB = new B(this); 
     objB.methodA(); 
    } 

    public void methodX() { 

    } 

} 

class B { 

    private A objA; 

    public B(A a) { 

     objA = a; 

    } 

    public void methodA() { 

     objA.methodX(); 

    } 
} 

class C { 

} 

這裏是main(String[] args)方法的其他變體:

public static void main(String[] args) {   
     C ca = new A(); 
     B b2 = new B((A)ca); // This is typcasting 
     b2.methodA(); 

    } 
+0

謝謝。其實我是從一個列表器裏面調用它的。問題就在於此。外部它工作正常,如你所說。 –

+0

是不知道你是如何在現實中調用它,但類型轉換是你可能會在之後。例如在這條線上完成'B b2 = new B((A)ca); '。請注意,變量'ca'的類型爲'C',並在此處轉換爲子類型'A'。 – Shahzeb