多型 物件轉型

2021-07-08 09:08:41 字數 1891 閱讀 4300

多型:

什麼是多型?

多型就是多種形態。

過載:

編譯時的多型

重寫: 執行時的多型

物件的多型性:

子類可以扮演父類,

作用:提高了物件的靈活性,擴充套件性;

弊端:不能呼叫子類獨有的方法和屬性;

前提是有繼承關係;

當引數型別是父類引用時,可傳入子類物件

形式: 父類引用指向子類物件,(但不能呼叫子類獨有的方法(不包括重寫方法))

fu f = new zi();

fu f = new zi2();

list 父

arraylist

linkedlist

vector

父類指向子類物件,但不能呼叫子類獨有的方法

public abstract void fu

public void zi extend fu

public void run()

}main 中:

fu f = new zi();

f不能呼叫run方法

fish g = new goldfish();//向上轉型、

goldfish gf = (goldfish)g;//向下轉型

向上轉型:兒子扮演父親的角色 fu f = new son();

向下轉型:父親扮演兒子的角色,父親不願意,要強制轉換

son s = (son)f;

前提:先向上在向下;否則型別轉換異常

子類扮演父類:---->向上轉型

父類扮演子類:---->向下轉型

person p = new son();//向上轉型

son s = (son)p;//向下轉型

son2 s = (son2)p;//轉型失敗,向下轉型必須先向上轉型

向上向下原則:從**來到**去

為了避免轉換異常,需要進行一些判斷:

instanceof用來判斷該引用是否屬於該類的例項或者該類的子類的例項

if(p instanceof student)else if(p instanceof employee)else

instanceof:常用來解決型別轉換前的判斷操作,保證不會出現異常,返回值是布林型別

返回true--->允許轉型

返回false--->不允許轉型

物件轉型:(多型的體現)

物件的向上轉型:子類指向父類--

物件的向下轉型:父類指向子類

(1)物件的向上轉型---一定成功

將子類的物件賦值給父類的引用

例:student s = new student();//s子類的物件

person p = s;//p父類的引用

//乙個引用能夠呼叫哪些成員(變數和函式),取決於這個引用的型別

//乙個引用呼叫的是哪乙個方法,取決於這個引用所指的物件

例如:student s = new student();//s子類的物件

person p = s;//p父類的引用

p.name="張三";

p.age = 18;

p.introduce();

(2)物件的向下轉型

將父類的物件賦值給子類的引用

(向下轉型的前提先向上轉型---s1,p,s2在堆中指向同乙個位址)

student s1 = new student();

person p = s1;

student s2 = (student)p;//()中為強制型別轉換

或:person p = new student();

student s = (student)p;

物件變數多型性 上轉型物件和下轉型物件

上轉型物件 上轉型物件只能訪問父類中宣告的成員變數和成員方法,不可以訪問子類新增的特有的成員變數和成員方法。如果子類重寫了父類的方法,則上轉型物件呼叫該方法時,必定是呼叫重寫的方法。如果子類重新定義了父類的同名變數,則上轉型物件應用該變數時是父類中的定義的變數,而不是子類中定義的變數。下轉型物件 將...

多型and轉型

public class animal public animal string name,int age public string getname public void setname string name public intgetage public void setage int ag...

物件導向之多型(向上轉型與向下轉型)

什麼是多型 同乙個行為具有多個不同表現形式或形態的能力就是多型。多型一般分為兩種 重寫式多型和過載式多型。過載式多型,也叫編譯時多型。也就是說這種多型再編譯時已經確定好了。過載大家都知道,方法名相同而引數列表不同的一組方法就是過載。在呼叫這種過載的方法時,通過傳入不同的引數最後得到不同的結果。重寫式...