JAVA中多型性的理解(上)————多型性中的方法
大家好,作為一個剛開始接觸寫博客的計算機小白,寫的內容是我在學習和理解程序中的一些想法,如果有不準確或者錯誤的地方麻煩大家指教【拱手】【拱手】
文章目錄
- JAVA中多型性的理解(上)————多型性中的方法
- 前言
- 一、多型性的初理解
- 二、多型性的使用條件
- 三、代碼示例
- 四、運行結果
- 總結
前言
關于JAVA中的多型性而言,對于我個人的理解而言其作用可能更多的節省代碼的數量,讓同一個方法可以被多次呼叫,避免多個子類在呼叫該方法的時候都需要再次將方法代碼敲一遍
一、多型性的初理解
①理解多型性:可以理解為一個事務的多種形態
②何為多型性:父類的參考指向子類的多型性(這里父類的參考也就是說new一個父類的物件,被賦值于子類的物件)
③多型性的使用:虛擬方法的呼叫
在有了物件的多型性之后,我們在編譯代碼的時候,只能呼叫父類中已經宣告的方法,但我們在實際運行代碼的時候,運行的結果是子類重寫后的方法
總結:編譯看左邊,運行看右邊
二、多型性的使用條件
①有類的繼承關系(extends)
②有方法的重寫
三、代碼示例
父類:Person
子類:Man Woman
主類:DuoTai
代碼目的:通過呼叫主類方法中的show方法來驗證多型性
代碼如下(示例):
package com.HeZiHan.java;
public class DuoTai {//主類
public static void main(String[] args) {
//列印父類的eat方法 and 每一個子類重寫后的eat方法
Person p1 = new Person();
p1.eat();
Man m1 = new Man();
m1.eat();
Woman w1 = new Woman();
w1.eat();
System.out.println("************************************************");
//列印進行多型化后的person的物件的eat方法
Person p2 = new Man();
p2.eat();
Person p3 = new Woman();
p3.eat();
System.out.println("************************************************");
//在主類中呼叫主類里的方法,但該方法也實作了多型化的使用
//在該方法中,實參和形參在一起,相當于Person person = new Man();Person person = new Woman();
DuoTai n =new DuoTai();
n.show(new Man());
n.show(new Woman());
}
//主類中的一個方法
public void show(Person person){
person.eat();
person.sleep();
}
// System.out.println("************************************************");
//如果沒有多型性的話,那么想要呼叫這個show方法就需要對這個方法進行多次重寫,如下:
// public void show(Man man){
// man.eat();
// man.sleep();
// }
// public void show(Woman woman){
// woman.eat();
// woman.sleep();
// }
}
//父類Person
class Person {
int age;
double weight;
public void eat(){
System.out.println("人需要吃飯");
}
public void sleep(){
System.out.println("人每天平均需要睡8小時");
}
}
//子類Man
class Man extends Person{
int houses;
//對父類中的方法進行重寫
public void eat(){
System.out.println("男人每天多吃肉");
}
public void sleep(){
System.out.println("男人平均每天睡7小時");
}
}
//子類Woman
class Woman extends Person{
int car;
//對父類中的方法重寫
public void eat(){
System.out.println("女人每天多吃蔬菜");
}
public void sleep(){
System.out.println("女人平均每天睡9小時");
}
}
四、運行結果
代碼如下(示例):
人需要吃飯
男人每天多吃肉
女人每天多吃蔬菜
************************************************
男人每天多吃肉
女人每天多吃蔬菜
************************************************
男人每天多吃肉
男人平均每天睡7小時
女人每天多吃蔬菜
女人平均每天睡9小時
總結
①關于物件的多型性而言,最直接的體現就是“子類的物件賦值給父類的參考”;代碼:Person person = new Man();其中在有了物件的多型性后,我們在編譯的時候,只能呼叫父類中宣告過的方法,子類中特有的方法我們不能夠呼叫,并且在運行期間,我們實際執行的是子類重寫后的方法內容,所以就是說“編譯看左,運行看右”,
②對于有了多型性以后,父類的參考中(Person p = new Man()中的p)它的記憶體中實際是加載了子類特有的屬性和方法,但是由于變數p宣告為父類Person型別,所以在編譯的時候只能夠呼叫父類中宣告的屬性和方法,導致子類中的屬性和方法不能夠呼叫,
③在多型性中,因為父類的參考被賦值為子類,所有在編譯和運行的時候雖然有用子類特有的屬性和方法,但是卻不能夠呼叫,如果想要呼叫就需要特殊的方法(與基本資料型別的強制型別轉換相關)或關鍵字instanceof的使用,我會寫在我的下一篇博客《JAVA中多型性的理解(下)————多型性中的屬性》中,
④感謝大家看到這里,這些就是我這個計算機小白的一些想法,如果有哪里出現了錯誤或者其他問題,歡迎大家指正,感謝感謝,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/273246.html
標籤:python
上一篇:2021-03-26
