多型的最終體現:父類引用變數可以指向子類物件
多型的前提:必須有子父類關係或者類實現介面的關係,否則無法完成多型
在使用多型後的父類引用變數呼叫方法時,會呼叫子類重寫後的方法
多型的定義格式:就是父類引用變數指向子類物件
父類引用變數 變數名 = new 子類型別();
變數名.方法名();
class fu {}
class zi extends fu {}
//類的多型使用
fu f = new zi();
注意:
同乙個父類的方法會被不同的子類重寫,在呼叫方法時,呼叫的是各個子類重寫後的方法。
例如:
person p1 = new student();
person p2 = new teacher();
p1.work(); //p1會呼叫student類中重寫的work方法
p2.work(); //p2會呼叫teacher類中重寫的work方法
當變數名指向不同的子類物件時,由於每個子類重寫父類方法的內容不同,所以會呼叫不同方法。
成員變數:
當子父類出現同名的成員變數時,多型呼叫該變數時:
編譯時期:參考的是引用型變數所屬的類中是否有被呼叫的成員變數。沒有,編譯失敗。
執行時期:也是呼叫引用型變數所屬的類中的成員變數。
class fu
class zi extends fu
class demo
}
成員方法:
編譯時期:參考引用變數所屬的類,如果沒有類中沒有呼叫的方法,編譯失敗。
執行時期:參考引用變數所指的物件所屬的類,並執行物件所屬類中的成員方法。
簡單記:編譯看等號左邊,執行看等號右邊
class fu
}class zi extends fu
}class demo
}
向上轉型:當有子類物件賦值給乙個父類引用時,便是向上轉型,多型本身就是向上轉型的過程。
使用格式:
父類型別 變數名 = new 子類型別();
如:person p = new student();
向下轉型:乙個已經向上轉型的子類物件可以使用強制型別轉換的格式,將父類引用轉為子類應用,這個過程是向下轉型。如果是直接建立父類物件,是無法完成向下轉型。
使用格式:
子類型別 變數名 = (子類型別)父類型別的變數;
如:student s = (student)p; //變數p實際上指向student物件
總結一下:
1.什麼時候使用向上轉型?
當不需要面對子類型別時,通過提高擴充套件性或者使用父類的功能就能完成相應的操作,這時,就可以使用向上轉型
例如:animal a = new dog();
a.eat();
2.什麼時候使用向下轉型?
當要使用子類特有功能,就需要使用向下轉型
例如:dog d = (dog)a;
d.lookhome();
3.向下轉型的好處:可以使用子類特有功能
弊端:需要面對具體的子類物件;在向下轉型時容易發生classcastexception型別轉換異常。在轉換之前必須做型別判斷
instanceof關鍵字用來判斷某個物件是否屬於某種資料型別。如學生的物件屬於學生,學生的物件屬於人類。
使用格式:
boolean b = 物件 instanceof 資料型別;
如:
person p1 = new student(); // 前提條件,學生類已經繼承了人類
boolean flag = p1 instanceof student; //flag結果為true
boolean flag2 = p2 instanceof teacher; //flag結果為false
Java物件導向 多型
歡迎光臨新長城部落格中心 物件導向 多型 多型的概述 某一類事物的多種存在的多種形態。1 多型的體現 父類的引用指向了自己的子類物件。父類的引用也可以接收自己的子類物件。2 多型的前提 必須是類與類之間有關係。要麼繼承,要麼實現。通常還有乙個前提 存在覆蓋。3 多型的好處 多型的出現大大的提高程式的...
java 物件導向多型
1 多型性 1 方法的過載和重寫 2 物件的多型性 2 物件的多型性 1 向上轉型 程式會自動完成 父類 父類物件 子類例項 2 向下轉型 強制型別轉換 子類 子類物件 子類 父類例項 3 案例 package csdn.zyl.demo class a12 public void tell2 cl...
Java物件導向(六)
抽象類 1.1什麼是抽象類,作用以及用法 抽象類自身不能建立物件,但是它的子類可以建立物件。抽象它的子鍵字是abstract 在父類中定義的抽象方法,在子類中必須實現 即方法重寫 抽象方法指只有功能宣告,抽象方法沒有方法體。抽象方法必須定義在抽象類中。1.2定義格式 抽象方法定義的格式 public...