多型:
什麼是多型?
多型就是多種形態。
過載:
編譯時的多型
重寫: 執行時的多型
物件的多型性:
子類可以扮演父類,
作用:提高了物件的靈活性,擴充套件性;
弊端:不能呼叫子類獨有的方法和屬性;
前提是有繼承關係;
當引數型別是父類引用時,可傳入子類物件
形式: 父類引用指向子類物件,(但不能呼叫子類獨有的方法(不包括重寫方法))
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...
物件導向之多型(向上轉型與向下轉型)
什麼是多型 同乙個行為具有多個不同表現形式或形態的能力就是多型。多型一般分為兩種 重寫式多型和過載式多型。過載式多型,也叫編譯時多型。也就是說這種多型再編譯時已經確定好了。過載大家都知道,方法名相同而引數列表不同的一組方法就是過載。在呼叫這種過載的方法時,通過傳入不同的引數最後得到不同的結果。重寫式...