如何访问子类wherin内部类中的外部类成员是继承的

时间:2014-10-03 12:47:21

标签: java inner-classes

//下面的类是子类扩展内部类和子类的例子我试图访问外部类的方法,即封装内部类的类。

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();      
    }
}

2 个答案:

答案 0 :(得分:1)

你的innerclass不是内心阶级。它是一个静态嵌套类,与其封闭类没有特殊关系。您无法访问封闭类的实例,因为innerclass或其子类没有此类实例可用。

如果innerclass确实是内部的,那么你必须用一个封闭的实例来实例化它:

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

然后,在parent_class_info_fetch()你可以写

outterclass.this.get_outer()

达到那种方法。

当然,在这样的代码中会有几层不好的做法,所以请考虑这只是一个学术上的执行。

您还应该了解Java中的基本命名约定。

答案 1 :(得分:0)

班级outterclass.innerclass静态类字段,这意味着您不一定要拥有outterclass的封闭实例。另一方面,get_outer的{​​{1}}方法是一种实例方法,因此您需要使用封闭实例来调用它。

使用您拥有的类层次结构,您必须使outterclass成为静态(这也需要使get_outer成为静态)。