Java物件導向 六 多型

2021-08-21 12:08:37 字數 2028 閱讀 6613

多型的最終體現:父類引用變數可以指向子類物件

多型的前提:必須有子父類關係或者類實現介面的關係,否則無法完成多型

在使用多型後的父類引用變數呼叫方法時,會呼叫子類重寫後的方法

多型的定義格式:就是父類引用變數指向子類物件

父類引用變數 變數名 =  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...