多態的簡單理解:
student類別繼承了Person類,則student類別的物件既是student又是person類別
多態性有兩種展現的形式:
1.方法的多型性:
(1)方法的重載:同一個方法可以根據傳入的參數的類型或個數的不同實現不同的功能
(2)方法的覆寫:同一個方法可能根據實現子類別的不同而有不同的實作
2.物件的多型性:
父類別與子類別實例之間的轉換處理
(1)物件向上轉型:父類別父類別實例=new 子類別實例();自動完成轉換
(2)物件向下轉型:子類別子類別實例=new (子類別)父類別實例();強制完成轉換
相關影片教學分享:java免費影片教學
#多態的最終體現:
1.為父類別引用變數可以指向子類別物件
2.多態的前提是必須有子父類別關係或類別實作介面關係,否則無法實作多態
3.在使用多態後的父類別引用變數呼叫方法時,會呼叫子類別重寫後的方法
多態的成員變數:
1.編譯的時候,參考父類別中喲沒有這個變量,如果有就編譯成功,如果沒有就編譯失敗
2.運行的時候,運行的是父類別中的變數值
成員變數編譯執行皆看父類別
多態的成員方法:
1.編譯的時候,參考父類別有沒有這個方法,如果有就編譯成功,如果沒有就編譯失敗
2.運行的時候。運行的是子類的重寫方法
成員方法編譯看父類,運行看子類
對象的兩種轉型方式的理解:
#1.物件向轉型:
向上轉型之後,子類別物件只能呼叫父類別擁有的方法,不能呼叫子類別獨自擁有的方法,透過向轉型實現多態性的使用
2.物件向下轉型:
如果物件向上轉型之後想要使用子類別獨有方法而父類別沒有的方法,需要使用物件的向下轉型
程式碼示範:
public class Person { public void Eat(){ //在person类中定义一个吃的抽象方法 } } public class Student extends Person{ public void Eat(){ System.out.println("学生吃学校食堂");//重写父类中的抽象方法 } public void Learning() { System.out.println("学生在学习");//定义一个student类特有的方法 } } public class Test { public static void main(String[] args) { // TODO 自动生成的方法存根 Person p=new Student();//通过向上转型定义一个p对象 p.Eat();//这是子父类共有的方法 p.Learning(); } }
在這個程式碼中我們透過向轉型呼叫了一個子類別特有的方法,但是會提示如下圖:
父類別中沒有定義Learning方法。但是我們又必須呼叫子類別的特有的方法,此時就需要透過向下轉型來實現
補充程式碼如下:
Student stu=(Student)p;//将p对象向下转型实现方法调用 stu.Learning();
想學習更多相關教學請造訪:java快速入門
以上是java物件導向之多型的詳細內容。更多資訊請關注PHP中文網其他相關文章!