为什么我们不能从封闭类中访问内部类的私有方法?

时间:2014-05-27 00:31:25

标签: java oop private

public class EnclosingClass{


    public void enclosingClassMethod(){
          InnerClass iC = new InnerClass();
          ic.innerClassPrivateMethod();   // this one works but why the following line doesn't       //work

          InnerClass.innerClassPrivateMethod();  // Why I can't call the method like this?


    }



    public class InnerClass{
         private void innerClassPrivateMethod(){

         }

    }

}

为什么我们无法像innerClassPrivateMethod()那样拨打InnerClass.innerClassPrivateMethod()?我看到"无法从类型EnclosingClass"

中对非静态方法innerClassPrivateMethod()进行静态引用

如果我将innerClassPrivateMethodenclosingClassMethod都更改为私有,则会收到错误

 InnerClass iC = new InnerClass();

as"无法访问类型为Basics6的封闭实例。必须使用enclosingClass类型的封闭实例限定分配。"

2 个答案:

答案 0 :(得分:2)

如果你想使用类名调用内部类的方法,或者我们可以静态地说,那么你需要做以下更改。

  1. 将内部类方法声明为静态。
  2. 非静态内部类永远不能有静态方法因此您需要将内部类更改为静态。

    public class EnclosingClass {

    public void enclosingClassMethod(){
          InnerClass iC = new InnerClass();
          iC.innerClassPrivateMethod();   // this one works but why the following line doesn't       //work
    
          InnerClass.innerClassPrivateMethod();  // This also works...
    
    
    }
    
    
    
    public static class InnerClass{     //  Class converted to static 
         private static void innerClassPrivateMethod(){   // Method converted to static
    
         }
    
    }
    

    }

答案 1 :(得分:1)

如果方法未表示为static,则它是实例方法。在这种情况下,实例必须是内部类。由于您没有通过第二次调用中的实例访问该方法,因此没有this引用等。

在内部类中定义static方法是没用的。首先是'#34;支持班"任意静态方法。我可以在public static void sort (int[] data);类中添加Utils作为ThisIsAUselessClass。它之所以重要的唯一原因是因为你有时想要制作这样的方法private。现在,因为类可以看到它的内部类和内部类的所有(包含private)成员都可以访问其"外类"的所有私有方法,所以没有理由定义静态内部类中的方法。