2014-10-03 87 views
1

//下面的類是在子類中擴展內部類和從子類的示例我試圖訪問外部類的方法即封裝內部類的類。如何訪問外部類成員的子類內部類繼承

package innerClass; 

public class outterclass { 
    private int outer=24; 
    protected int get_outer(){ 
     return outer; 
    } 
    protected static class innerclass{ 
     private int outer=25; 
     protected int get_outer(){ 
      return outer; 
     } 
    } 
} 
package innerClass; 

public class subclass_B extends outterclass.innerclass { 

    void parent_class_info_fetch(){ 
     System.out.println(get_outer()); 
     //i want to access the outer class get_outer method and how do i achieve that? 
    } 
    public static void main(String[] args) { 
     InheritanceStaticInnerClass_B isb=new InheritanceStaticInnerClass_B(); 
     isb.parent_class_info_fetch();  
    } 
} 
+0

Marko Topolnik答案是正確的。但是如果你需要這樣做的話,它會非常糟糕。 – talex 2014-10-03 12:55:21

回答

1

您的innerclass不是內部類。它是一個靜態嵌套類,與它的封閉類沒有特別的關係。您無法到達封閉類的實例,因爲沒有這樣的實例可用於innerclass或其子類。

如果innerclass確實是內在的,那麼你就必須有一個封閉的情況下進行實例化:

outterclass outer = new outerclass(); 
subclass_B b = outer.new subclass_B(); 

然後,在parent_class_info_fetch()你可以寫

outterclass.this.get_outer() 

達到這一方法。

當然,在這樣的代碼中會有幾層不好的做法,所以請考慮這只是一個學術性的行爲。

您還應該瞭解Java中的基本命名約定。

+0

感謝您的回覆,所以,我沒有解決上述代碼,直到我把它作爲內部類。 – Prash 2014-10-03 12:55:58

+0

感謝marko,您的建議非常感謝! – Prash 2014-10-03 12:58:55

0

該類outterclass.innerclass是一個靜態類字段,這意味着你不一定有一個封閉的實例outterclass。另一方面,outterclass的方法get_outer是一個實例方法,因此您需要封閉的實例來調用它。

隨着您的類層次結構,您必須使get_outer爲靜態(這也需要使靜態爲outer)。

+0

謝謝manouti,會做同樣的工作,它是最好的做法嗎? – Prash 2014-10-03 13:04:25

+0

@Prash正如Marko的其他回答中所提到的,你必須首先讓「內部類」成爲內在的東西。否則,使用靜態類字段,最簡單的解決方案是使該方法爲靜態。 – manouti 2014-10-03 13:15:33