java重写run方法
class Car extends Vehicle {
public static void main(String [] args) {
new Car().run();
}
private final void run() {
System.out.println("Car");
}
}
class Vehicle {
private final void run() {
System.out.println("Vehicle");
}
}
这是“J2SE5平台SCJP考试”中的一道练习题 它显然还车
但Car扩展了车辆并超越了run()。但磨合超类是最终的。我不认为你可以推翻最后的方法
# 1 楼答案
秘密在于
private
修饰符JLS 8.4.3.3. final Methods私有方法在其自身之外的任何地方都不可见,因此不能被重写
他们只是碰巧有着相同的名字,但除了名字之外,他们什么都没有
如果您扩展了一个在源代码中不知道的类,这种行为也很有意义。你需要知道所有你看不到的私有方法签名,这样你就不会意外地重写和破坏它们
# 2 楼答案
值得注意的是
private可以在Car类中访问,也可以在您声明方法为final的车辆类中访问。Final是一个关键字,如果您为车辆创建对象引用,则不能覆盖到其他类。所以新车()。run()将访问输出打印为“Car”。在这里,覆盖概念将不适用