【发布时间】:2012-10-07 12:34:12
【问题描述】:
在下面的代码 sn-p 中,大概它应该发出一些编译错误,但它没有:
class Outer {
public static class Inner {
static String obj = "Inner";
}
static Optional Inner = new Optional();
//The (inner) class name and the object name are same.
}
class Optional {
String obj = "Optional";
}
public class Main {
public static void main(String[] args) {
System.out.println(Outer.Inner.obj);
//Refers to the string inside the optional class
}
}
Outer 类内部有一个名为 Inner 的静态类。此外,它声明了Optional (static Optional Inner = new Optional();) 类的对象(静态)
该对象和类名(在类Outer 内)相同,即Inner。程序显示Optional。 main() 中的唯一表达式 Outer.Inner.obj 预计会显示 Inner,但事实并非如此。然而,实际输出是Optional,这是Optional 类的情况。
显示Inner 的一种方法是将对象名称更改为其他名称。
static Optional Inner1 = new Optional();
从它显示的输出中,似乎对象名称(或变量)被选择而不是类型名称(类Inner),因为它们具有相同的名称。此处应用的具体情况是什么?
【问题讨论】:
标签: java inner-classes static-classes