规则阐述
- 当一个类被
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方法。
- 如果是一个非