1. final 方法不能被重写
如果父类中的方法被声明为 final,那么这个方法就不能被子类重写。尝试在子类中定义与父类 final 方法同名、同参数列表、同返回类型(或子类型)的方法会导致编译错误。
class Parent {
final void show() {
System.out.println("Parent show()");
}
}
class Child extends Parent {
// 编译错误:无法重写 final 方法
@Override
void show() {
System.out.println("Child show()");
}
}

2. static 方法不是重写,而是遮蔽
static 方法不能被重写,因为在 Java 中,static 方法是类方法,而不是实例方法。如果你在子类中定义了与父类同名的 static 方法,那么这实际上是在子类中遮蔽了父类的 static 方法,而不是重写它。
class Parent {
static void show() {
System.out.println("Parent show()");
}
}
class Child extends Parent {
// 这不是重写,而是遮蔽
static void show() {
System.out.println("Child show()");
}
}
3. final 与 static 的组合
当一个方法同时被声明为 final 和 static 时,它仍然是一个类方法,不能被重写,也不能被子类中的同名方法所遮蔽。由于 final 的限制,这个组合实际上限制了任何尝试在子类中定义同名方法的尝试。


