一、Override和Overload的基本概念
Override和Overload是Java語言中兩個非常重要的概念,都與方法相關。Override是指子類重寫父類的方法,即子類定義了與父類方法名,參數列表和返回值類型完全相同的方法,並且該方法的訪問修飾符比父類中該方法的訪問修飾符更寬鬆。Overload是指在一個類中定義多個方法,它們具有相同的方法名,但是參數列表不同。Java通過方法名和參數列表的不同來區分這些方法。
二、Override和Overload的區別
下面從幾個方面詳細介紹Override和Overload的區別。
1. 聲明
Override表示子類重寫了父類的方法,而Overload則是遍布在單個類中的多個方法。
class Parent {
public void eat() {
System.out.println("Parent is eating...");
}
}
class Child extends Parent {
@Override
public void eat() {
System.out.println("Child is eating...");
}
public void eat(String food) {
System.out.println("Child is eating " + food);
}
}
public class Test {
public static void main(String[] args) {
Parent p = new Child();
p.eat(); // 此時會調用Child類中的eat方法,而不是Parent類中的eat方法。
Child c = new Child();
c.eat("apple");
}
}
2. 參數列表
Override方法的參數列表必須與父類方法的參數列表完全相同,而Overload方法的參數列表必須不同。
class Person {
public void walk(String name) {
System.out.println(name + " is walking...");
}
}
class Fruit {
public void eat(String name) {
System.out.println(name + " is eating...");
}
}
class Apple extends Fruit {
@Override
public void eat(String name) {
System.out.println(name + " is eating an apple...");
}
public void eat(String name, int amount) {
System.out.println(name + " is eating " + amount + " apples...");
}
}
public class Test {
public static void main(String[] args) {
Person p = new Person();
p.walk("Mike");
Apple a = new Apple();
a.eat("Tom"); // 此時會調用Apple類中的eat方法,而不是Fruit類中的eat方法。
a.eat("Jerry", 3);
}
}
3. 返回值
Override方法的返回值必須與父類方法的返回值類型相同或為其子類類型,而Overload方法的返回值類型可以是任意類型,甚至可以沒有返回值。
class Animal {
public void speak() {
System.out.println("Animal is speaking...");
}
}
class Dog extends Animal {
@Override
public String speak() { // 編譯會報錯,因為返回值類型不匹配。
return "Dog is barking...";
}
public void speak(int times) {
for (int i = 0; i < times; i++) {
System.out.println("Dog is barking...");
}
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Dog();
a.speak(); // 此時會調用Dog類中的speak方法,而不是Animal類中的speak方法。
Dog d = new Dog();
d.speak(3);
}
}
4. 靜態和動態綁定
Override方法是動態綁定的(也稱為後期綁定),也就是說,在運行時,Java會根據對象的實際類型來決定調用哪個方法;而Overload方法是靜態綁定的(也稱為早期綁定),也就是說,在編譯時,Java編譯器會根據傳入的參數列表決定使用哪個方法。
class Animal {
public void sound() {
System.out.println("This is an animal.");
}
}
class Dog extends Animal {
public void sound() {
System.out.println("This is a dog.");
}
public void sound(String name) {
System.out.println(name + " is barking...");
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Dog();
a.sound(); // 此時會調用Dog類中的sound方法,而不是Animal類中的sound方法。
Dog d = new Dog();
d.sound("Tom");
}
}
三、總結
Override和Overload都是Java中非常重要的方法概念。Override表示子類重寫了父類的方法,而Overload則是遍布在單個類中的多個方法。它們之間的區別主要在於聲明、參數列表、返回值以及靜態和動態綁定這些方面。在實際編程中,應根據需要正確地使用這兩個概念。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/310073.html
微信掃一掃
支付寶掃一掃