2014-10-03 88 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