package com.yinbodotcc;
/**
*
* @author yay
* 这个程序演示了,由于没有遵循好的命名规则,导致的尴尬的问题,
* 但是程序不会报错,会打印white。因为,即当一个变量和一个类型具有相同的名字,
* 并且它们位于相同的作用域时,变量名具有优先权[JLS 6.5.2]
*
*/
public class PrivateClass
{
public static void main(String[] args)
{
System.out.println(X.Y.Z);
}
}
class X
{
static class Y
{
static String Z = "Black";
}
static C Y = new C();
}
class C
{
String Z = "White";
}
说明:
1。也可以让X.Y表示类,方法是在main中用 System.out.println(((X.Y)null).Z);
2.另外一种方法是利用JDK的Generic Programming:
public static <T extends X.Y> void main(String[] args)
{
System.out.println(T.Z);
}
3。当然还有一种方法:
public static class A extends X.Y{}
public static void main(String[] args)
{
System.out.println(A.Z);
}