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