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()
进行静态引用
如果我将innerClassPrivateMethod
和enclosingClassMethod
都更改为私有,则会收到错误
InnerClass iC = new InnerClass();
as"无法访问类型为Basics6的封闭实例。必须使用enclosingClass类型的封闭实例限定分配。"
答案 0 :(得分: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
)成员都可以访问其"外类"的所有私有方法,所以没有理由定义静态内部类中的方法。