【问题标题】:how to access the outer class members in subclass wherin inner class is inherited如何在继承内部类的情况下访问子类中的外部类成员
【发布时间】:2014-10-03 12:47:21
【问题描述】:

//下面的类是在子类中扩展内部类的示例,并且我试图从子类访问外部类的方法,即封装内部类的类。

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

【问题讨论】:

  • Marko Topolnik 的答案是正确的。但如果你需要这样做,那就太糟糕了。

标签: java inner-classes


【解决方案1】:

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

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

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

那么,parent_class_info_fetch() 你可以写

outterclass.this.get_outer()

达到那个方法。

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

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

【讨论】:

  • 感谢您的回复,所以,在我将其作为内部类之前,我没有解决上述代码的问题。
【解决方案2】:

outterclass.innerclass 类是一个静态 类字段,这意味着您不一定有outterclass 的封闭实例。另一方面,outterclass 的方法 get_outer 是一个实例方法,所以你需要封闭的实例来调用它。

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

【讨论】:

  • 感谢 manouti,我会这样做,而且效果很好。这是最佳做法吗?
  • @Prash 正如 Marko 在另一个答案中提到的那样,您必须首先让 innerclass 真正内在。否则,使用静态类字段,最简单的解决方案是将方法设为静态。
最近更新 更多