规则阐述
- 当一个类被
final
修饰时,这个类不能被继承。因为重写(Override)是在子类中对父类方法进行重新定义的操作,既然类不能被继承,那就不存在子类重写父类方法的情况。 - 所以从这个角度严格来说,“被
final
修饰的类的所有方法都不能被重写”这个说法是正确的,但这是基于类不能被继承这个前提导致的。
- 当一个类被
示例说明
- 例如,有一个
final
类如下:final class FinalClass { public void method1() { System.out.println("This is method1 in FinalClass"); } }
- 当尝试创建一个子类来继承这个
final
类并对其中的方法进行重写时,会出现编译错误。例如:class SubClass extends FinalClass { // 编译错误,因为不能继承FinalClass,所以无法重写其中的方法 public void method1() { System.out.println("This is an attempt to override method1"); } }
- 例如,有一个
对比非
final
类情况- 如果是一个非
final
类,其中的方法可以根据需要选择是否可以被重写。可以通过将方法声明为final
来阻止该方法被重写,也可以不使用final
声明,允许子类在满足一定规则(如方法签名相同等重写规则)的情况下进行重写。例如:class ParentClass { public void method2() { System.out.println("This is method2 in ParentClass"); } } class ChildClass extends ParentClass { @Override public void method2() { System.out.println("This is method2 in ChildClass"); } }
- 在这个例子中,
ParentClass
不是final
类,method2
方法也没有被声明为final
,所以ChildClass
可以成功地重写method2
方法。
- 如果是一个非