日期:2014-05-20  浏览次数:20708 次

嵌套类与子类命名相同产生的问题

class A
{
static class B
{

}
}

class B extends A 
{
public static void f()
{

}
}

class C extends B
{
public static void f()
{

}

public static void test()
{
f();
B.f(); //编译错误:The method f() is undefined for the type A.B
}
}


如上代码,C.test()中用B.f()实际会调用A.B的方法f(),如果要调用外部类B的f(),要怎么做?
本人java新手,试验内部类例子时碰到这问题。
------解决方案--------------------
个人浅见:
楼主这个程序有3个特殊地方, 1是静态内部类与其外围类子类同名;2是外围类子类的子类又隐藏了父类的静态方法;3 是试图在子类里操作父类的隐藏的静态方法。
这里的静态内部类是:B, 外围类是 A, 外围类子类是 B, 外围类子类的子类是 C.

我测试了,这种情况是没有办法实现的。
要么把静态内部类换名, 要么不要在C类里隐藏其父类B的静态方法(或者说给C的方法f() 换个名字。

------解决方案--------------------
论 package 的重要性