为什么这个Variables可访问性与另一个类中一个类的内部类如此不同



为什么不能从类Inner访问db可以从同一个类访问?

public class Outer {
public int a = 1;
private int b = 2;
public void method(final int c) {
int d = 3;
class Inner {
private void iMethod(int e) {
}
}
}
}
这是因为abclass Outer的属性,而d是方法中名为method的变量。因此,它也应该可以访问d

这是一个来自tutorialspoint的例子。

在Java中,我们可以在一个方法中编写一个类,这将是一个本地类型与局部变量一样,内部类的范围也受到限制在方法中。

方法本地内部类只能在方法内实例化其中定义了内部类。以下程序显示如何使用本地内部类的方法。

public class Outerclass{
//instance method of the outer class 
void my_Method(){
int num = 23;
//method-local inner class
class MethodInner_Demo{
public void print(){
System.out.println("This is method inner class "+num);     
}   
}//end of inner class
//Accessing the inner class
MethodInner_Demo inner = new MethodInner_Demo();
inner.print();
}
public static void main(String args[]){
Outerclass outer = new Outerclass();
outer.my_Method();           
}
}

This is method inner class 23

Inner是一个本地类,因为它是在Java代码块中本地声明的,而不是作为类的成员。因此,Inner可以访问包含类Outer的任何成员,如ab,包括私有成员。并且它无法访问d,因为对于Java版本7及更早版本,d未声明为final

[..]局部类可以使用局部变量、方法参数,甚至在其范围内的异常参数,但仅当变量或参数被声明为final。这是因为本地类实例的生存期可能比定义类的方法的执行。为此原因,本地类必须具有所有本地类的私有内部副本它使用的变量(这些副本由编译器)。确保局部变量和私有副本总是一样的是坚持局部变量是最终的。

请参阅此处。

最新更新