前言
首先,會(huì)大致介紹一下什么叫做向上轉(zhuǎn)型,方便后續(xù)的理解
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、向上轉(zhuǎn)型
1.概念:
向上轉(zhuǎn)型是Java的一個(gè)多態(tài)性的表現(xiàn)形式。指的是一個(gè)子類的對(duì)象賦值給父類類型的引用變量。換句話說,它是將一個(gè)對(duì)象轉(zhuǎn)換為它的父類類型。
2.CODE
class Animal {
public void eat() {
System.out.println("Animal is eating.");
}
}
class Dog extends Animal {
public void bark() {
System.out.println("Dog is barking.");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat(); // 直接通過子類對(duì)象調(diào)用父類方法
dog.bark(); // 調(diào)用子類特有的方法
Animal animal = dog; // 向上轉(zhuǎn)型,將Dog對(duì)象賦值給Animal類型的引用變量
Animal animal1 = new Dog();//也可以這樣子
animal.eat();
animal.eat(); // 通過父類引用調(diào)用父類方法
// animal.bark(); // 錯(cuò)誤,父類引用無法調(diào)用子類特有的方法
}
}
在上述示例中,Dog 類繼承自 Animal 類。通過向上轉(zhuǎn)型,我們將 Dog 對(duì)象賦值給 Animal 類型的引用變量 animal。雖然 animal 是 Animal 類型的引用,但實(shí)際上它引用的是 Dog 類的對(duì)象。因此,我們可以通過 animal 調(diào)用 Animal 類的方法,但無法調(diào)用 Dog 類特有的方法。
二、重寫
1.發(fā)生在子類和父類之間。
2.子類通過定義一個(gè)與父類中具有相同名稱、參數(shù)列表和返回類型的方法來重寫父類的方法。
3.重寫方法在運(yùn)行時(shí)動(dòng)態(tài)綁定,即根據(jù)實(shí)際對(duì)象的類型確定調(diào)用哪個(gè)方法。
4.重寫方法可以訪問和修改父類中的非私有成員。
5.重寫方法可以修改方法的行為,實(shí)現(xiàn)自定義的邏輯。
class Animal {
public void makeSound() {
System.out.println("Animal makes a sound.");
}
}
class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Cat meows.");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Animal();
animal.makeSound(); // 輸出:Animal makes a sound.
Cat cat = new Cat();
cat.makeSound(); // 輸出:Cat meows.
Animal animalCat = new Cat();
animalCat.makeSound(); // 輸出:Cat meows.,動(dòng)態(tài)綁定到 Cat 類的 makeSound() 方法
}
}
看到雖然向上轉(zhuǎn)型了,但是調(diào)用的依然是子類的方法。
動(dòng)態(tài)和靜態(tài)綁定在文末
三.重載
1.發(fā)生在同一個(gè)類中,或者在父類和子類之間。
2.同一個(gè)類中的方法可以有相同的名稱,但參數(shù)列表必須不同(參數(shù)的類型、順序或數(shù)量)。
3.重載方法在編譯時(shí)靜態(tài)綁定,即根據(jù)調(diào)用方法時(shí)傳遞的參數(shù)類型來確定調(diào)用哪個(gè)方法。
4.重載方法不能修改已有方法的行為,只是提供了更多的方法簽名選項(xiàng),用于處理不同的參數(shù)組合
class Calculator {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
public String add(String a, String b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Calculator calculator = new Calculator();
int result1 = calculator.add(2, 3);
System.out.println(result1); // 輸出:5
double result2 = calculator.add(2.5, 3.5);
System.out.println(result2); // 輸出:6.0
String result3 = calculator.add("Hello", "World");
System.out.println(result3); // 輸出:HelloWorld
}
}
所以只是提供了更多的方法簽名選項(xiàng),用于處理不同的參數(shù)組合。
四.動(dòng)態(tài)和靜態(tài)綁定
1.當(dāng)說重載方法在編譯時(shí)靜態(tài)綁定,是指在編譯時(shí)期就確定了要調(diào)用哪個(gè)重載方法,而不是在運(yùn)行時(shí)動(dòng)態(tài)決定。
當(dāng)我們調(diào)用一個(gè)重載方法時(shí),編譯器會(huì)根據(jù)我們傳遞的參數(shù)類型來確定要調(diào)用哪個(gè)重載方法。這個(gè)決定是在編譯時(shí)期完成的,因此稱為靜態(tài)綁定。
比如上述圖片中calculator就是根據(jù)前面是int還是double類型確定調(diào)用哪個(gè)方法
2.動(dòng)態(tài)綁定(Dynamic binding)是指在程序運(yùn)行時(shí)根據(jù)對(duì)象的實(shí)際類型確定要調(diào)用的方法。在動(dòng)態(tài)綁定中,方法的調(diào)用是根據(jù)對(duì)象的實(shí)際類型來決定的,而不是根據(jù)變量的聲明類型或編譯時(shí)期的類型來決定。
動(dòng)態(tài)綁定通常與多態(tài)性(Polymorphism)相關(guān)聯(lián)。當(dāng)使用父類類型的引用變量引用子類對(duì)象時(shí),如果調(diào)用的方法在子類中被重寫,那么在運(yùn)行時(shí)會(huì)根據(jù)對(duì)象的實(shí)際類型來決定調(diào)用的方法。就是仍然調(diào)用子類的方法
總結(jié)
1.重寫是子類對(duì)父類方法的重新實(shí)現(xiàn),重載是在同一個(gè)類中或父子類之間對(duì)方法名稱的多次定義。
2.重寫關(guān)注于繼承關(guān)系,子類重寫父類的方法。
3.重載關(guān)注于方法的參數(shù)列表,同一個(gè)類中的方法可以有不同的參數(shù)列表。
4.重寫方法在運(yùn)行時(shí)動(dòng)態(tài)綁定,重載方法在編譯時(shí)靜態(tài)綁定。文章來源:http://www.zghlxwxcb.cn/news/detail-464129.html
5.需要注意的是,重寫和重載的區(qū)別在于方法的簽名(包括方法名稱和參數(shù)列表),而不僅僅是方法名稱相同。
好了博客到此結(jié)束咯,希望大佬們的三連,歡迎大佬們的評(píng)論哇?。?span toymoban-style="hidden">文章來源地址http://www.zghlxwxcb.cn/news/detail-464129.html
到了這里,關(guān)于還沒搞懂重寫和重載嗎?這篇文章可以幫助你的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!