在Java中,覆盖(override)和扩展(extend)有什么区别?

12 浏览
0 Comments

在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();  
   }  
}  

0
0 Comments

在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关键字修饰的方法可以被重写。

0