在Java中,覆盖(override)和扩展(extend)有什么区别?
在Java中,覆盖(override)和扩展(extend)有什么区别?
final
关键字可以用于方法和类,但如果我们将其用于方法,则该方法不能被重写,如果我们将其用于类,则该类不能被继承。那么请告诉我重写(override)和继承(extend)之间的主要区别是什么?\n例如,下面的程序会导致编译错误(编译时错误):\n
Class Bike{ final void run(){ System.out.println("running"); } } class Honda extends Bike{ void run(){ System.out.println("running safely with 100kmph"); } public static void main(String args[]){ Honda honda= new Honda(); honda.run(); } }
在Java中,override和extend是两个重要的概念。override表示重写,extend表示继承。但是在给定的代码中,出现了一些问题。
首先,在给定的代码中,没有正确缩进和格式化。修正这些问题后,代码如下:
class Bike { final void run() { System.out.println("running"); } } class Honda extends Bike { void run() { System.out.println("running safely with 100kmph"); } public static void main(String args[]) { Honda honda = new Honda(); honda.run(); } }
其次,修正了类的声明问题,修正后的代码如下:
class Bike { final void run() { System.out.println("running"); } } class Honda extends Bike { void run() { System.out.println("running safely with 100kmph"); } public static void main(String args[]) { Honda honda = new Honda(); honda.run(); } }
在修正这些问题之后,我们可以看出在Java中,final关键字修饰的方法表示该方法不能被重写。例如,给定一个名为Dog的类,其中有一个被final修饰的bark方法:
public class Dog { final void bark() { System.out.println("Woof!"); } }
如果有一个名为Wolf的类继承自Dog类,那么Wolf类将无法重写bark方法,无论怎样,它始终打印"Woof!"。但是,如果我们不使用final修饰符,就可以实现方法的重写。例如:
class Bike { void run() { System.out.println("running"); } } class Honda extends Bike { void run() { System.out.println("running safely with 100kmph"); } public static void main(String args[]) { Honda honda = new Honda(); honda.run(); } }
在修复了代码中的问题后,我们可以看到在Java中,使用final关键字修饰的方法不能被重写,而不使用final关键字修饰的方法可以被重写。