具有相同名称的变量是可以的。 私人,公共,静态,实例,本地方法,块本地,不管。 Java选择最接近的一个。它比方法更松散。
JLS3#8.3:(这里只有1这是在第一句说限制)
它是一类声明体编译时错误名称相同声明两个领域。方法,类型和字段可能具有相同的名称,因为它们在不同的上下文中使用,并且通过不同的查找过程(第6.5节)进行消歧。
如果类声明了一个具有特定名称的字段,那么该字段的声明被称为隐藏在超类和该类的超接口中具有相同名称的字段的任何和所有可访问的声明。字段声明还隐藏了封闭类或接口中任何可访问字段的声明(第6.3.1节),以及在任何封闭块中具有相同名称的任何本地变量,形式方法参数和异常处理程序参数。
如果一个字段声明隐藏了另一个字段的声明,则这两个字段不必具有相同的类型。
一个类继承自它的直接超类和直接超接口超类和超接口的所有非私有字段,它们都可以在类中被代码访问并且不被类中的声明隐藏。
请注意,超类的专用字段可能可以访问子类(例如,如果两个类都是同一类的成员)。尽管如此,私人领域永远不会被一个子类继承。
一个类可能会继承具有相同名称的多个字段(第8.3.3.3节)。这种情况本身并不会导致编译时错误。但是,任何在类的主体中通过其简单名称引用任何这样的字段的尝试都会导致编译时错误,因为这样的引用是不明确的。
// this is a valid program!
class $
{
$ $;
$ $($ $)
{
class $$ extends $
{
$$ $;
}
return new $$();
}
}
了解Java编码约定 - 您的类名不好。为什么你会同时做同一班的继承和组成? IS-A和HAS-A在同一个对象中。你应该下定决心。 – duffymo 2011-02-16 00:27:54