多態(tài),就是重載和重寫.重載發(fā)生在一個類中.重寫發(fā)生在子類,意思就是子類重寫父類相同名稱的方法.剛學(xué)語言有的東西,不必搞得那么清楚,只有知道怎么用就行了,有的問題你要想真正把它搞得很懂,短時間是不可能的,比如說接口,沒有幾年工作經(jīng)驗?zāi)愀静豢赡苷嬲斫馐裁词墙涌冢踔劣械娜斯ぷ魉模迥暌矝]搞明白什么是接口,不要花太多時間去搞這些不容易搞懂的問題.
重載的特性,方法名相同.返回類型,傳入方法的參數(shù)不同(包括個數(shù)和類型).
重寫的特性,方法名相同,返回類型,參數(shù)均相同,必須發(fā)生在子類.
1.Java語言允許某個類型的引用變量引用子類的實例,而且可以對這個引用變量進(jìn)行類型轉(zhuǎn)換。
Animal animal=new Dog(); //引用變量animal引用一個Animal子類Dog的實例
Dog dog=(Dog)animal; //向下轉(zhuǎn)型,把Animal類型轉(zhuǎn)換為Dog類型
Creature creature=animal; //向上轉(zhuǎn)型,把Animal類型轉(zhuǎn)換為 Creature類型
animal=new Cat(); //引用變量animal引用另一個Animal子類Cat的實例
注:Creature這里指的是生物。
2.如果把引用變量轉(zhuǎn)換為子類類型,稱為向下轉(zhuǎn)型,如果把引用變量轉(zhuǎn)換為父類類型,稱為向上轉(zhuǎn)型。
3.在進(jìn)行引用變量的類型轉(zhuǎn)換時,會受到各種限制。而且在通過引用變量訪問它所引用的實例的靜態(tài)屬性、靜態(tài)方法、實例屬性、實例方法,以及從父類中繼承的方法和屬性時,Java虛擬機會采用不同的綁定機制。
4.成員變量、靜態(tài)方法按照引用變量聲明的類型靜態(tài)綁定;實例方法按照引用變量引用的實例動態(tài)綁定。
例如,對于以下這段代碼:
Fathers f=new Sons();
System.out.println(“f.var=”+f.var);
System.out.println(“f.staticVar=”+f.staticVar);
f.method();
f.staticMethod();
運行時將會輸出如下結(jié)果:
f.var=FatherVar
f.staticVar=StaticFaterVar
Son method
Static Father method
class Fathers{
String var="FatherVar";
static String staticVar="StaticFatherVar";
void method(){System.out.println("Father method");}
static void staticMethod(){System.out.println("Static Father method");}
}
class Sons extends Fathers{
String var="SonVar";
static String staticVar="StaticSonVar";
void method(){System.out.println("Son method");}
static void staticMethod(){System.out.println("Static Son method");}
String sonVar=null;
void sonMethod(){}
}
沒有什么幾種方法只有一種滿足三個條件:
1、必須要有繼承
2、父類對象指向指向之類對象的應(yīng)用
3、子類對象重寫了父類的方法。
如:
1、必須要有繼承
class Person{
String name;
int age;
public String getName() {
System.out.println("這是父類的方法,我的名字是:"+name);
return "我是一個人,我的名字是:"+name;
}
}
class Teacher extends Person{
public String getName() {//子類對象重寫了父類的方法。
System.out.println("這是子類類的方法,我的名字是:"+name);
return "我是一個老師,我的名字是:"+name;
}
}
關(guān)鍵字:extends繼承,如Teacher extends Person (老師繼承了人的類)
2、父類對象指向指向之類對象的應(yīng)用
public class Test{
public static void main(String args[]) {
Person p = new Teacher()//父類Person的變量p 指向子類Teacher
}
}
3、子類對象重寫了父類的方法。
在父類中有一個方法叫g(shù)etName()同樣在子類Teacher中也有一個,但是Teacher重寫了getName()的方法。
public class Test{
public static void main(String args[]) {
Person p = new Teacher()//父類Person的變量p 指向子類Teacher
p.name = "李曉明";
String Name = p.getName();//這個地方體現(xiàn)了多態(tài),調(diào)用的是子類重寫后的方法
System.out.println(Name);
}
}
的輸出結(jié)果將是:
這是子類類的方法,我的名字是:李曉明
我是一個老師,我的名字是:李曉明
====================================
如果沒有多態(tài)的存在結(jié)果將是這樣的:
這是父類的方法,我的名字是:李曉明
我是一個人,我的名字是:李曉明
===================================
至于你說的“實現(xiàn)面向?qū)ο蟮亩鄳B(tài)性有哪幾種方法”
只要滿足這三個條件的方法都可以是多態(tài)咯。
聲明:本網(wǎng)站尊重并保護(hù)知識產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請在一個月內(nèi)通知我們,我們會及時刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁面生成時間:2.741秒