class Super
{
static String greeting()
{
return"Goodnight";
}
String name()
{
return"Richard";
}
}
class Sub extends Super
{
static String greeting()
{
return"Hello";
}
String name()
{
return"Dick";
}
}
class Test
{
publicstaticvoidmain(String[] args)
{
Super s = new Sub();
System.out.println(s.greeting() + ", " + s.name());
}
}
以上代码摘自java语言规范。结果输出是:Goodnight, Dick。该实例较好得展示了java覆盖特性。 Super s = new Sub();该语句是覆盖成为可能的关键部分。对象s是sub类的实例,但是虽然变量 s的数据类型为 Super 类。这样在s.greeting() s.name()是就产生了覆盖。先来看name()方法,子类和父类同时有name(),且为实例方法非静态方法。那么在创建对象以后,由于对象的特殊性质,子类的name()对父类的name()方法产生了覆盖。这样就比较好理解后一部分输出了。