百度搜索圈T社區(qū) 免費行業(yè)視頻教程
www.aiquanti.com
多態(tài),就是重載和重寫.重載發(fā)生在一個類中.重寫發(fā)生在子類,意思就是子類重寫父類相同名稱的方法.剛學(xué)語言有的東西,不必搞得那么清楚,只有知道怎么用就行了,有的問題你要想真正把它搞得很懂,短時間是不可能的,比如說接口,沒有幾年工作經(jīng)驗?zāi)愀静豢赡苷嬲斫馐裁词墙涌?甚至有的人工作四,五年也沒搞明白什么是接口,不要花太多時間去搞這些不容易搞懂的問題.
重載的特性,方法名相同.返回類型,傳入方法的參數(shù)不同(包括個數(shù)和類型).
重寫的特性,方法名相同,返回類型,參數(shù)均相同,必須發(fā)生在子類.
1.Java語言允許某個類型的引用變量引用子類的實例,而且可以對這個引用變量進行類型轉(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.在進行引用變量的類型轉(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(){}
}
Java多態(tài)是面向?qū)ο缶幊讨械囊粋€重要概念,它允許我們使用一個父類類型的引用來指向?qū)嶋H上是其子類對象的實例。Java多態(tài)基于繼承和方法重寫的原理,可以在運行時根據(jù)對象的實際類型動態(tài)地調(diào)用相應(yīng)的方法。多態(tài)的好處在于提高代碼的靈活性和可擴展性,使程序的設(shè)計更加簡潔、可維護。
使用Java多態(tài)可以實現(xiàn)代碼的解耦和靈活性。當(dāng)我們編寫一段程序時,可以使用父類的引用來指向不同的子類對象,從而減少對具體子類的依賴程度。這使得程序更容易擴展和維護。此外,多態(tài)還有利于實現(xiàn)基于接口的編程,提高代碼的可讀性和可維護性。
要使用Java多態(tài),需要遵循以下幾個步驟:
通過以上步驟,我們可以在運行時根據(jù)實際對象的類型來調(diào)用相應(yīng)的方法,實現(xiàn)多態(tài)的效果。
下面通過一個簡單的例子來說明多態(tài)的用法。
class Animal {
public void makeSound() {
System.out.println("動物發(fā)出聲音");
}
}
class Dog extends Animal {
public void makeSound() {
System.out.println("狗在汪汪叫");
}
}
class Cat extends Animal {
public void makeSound() {
System.out.println("貓在喵喵叫");
}
}
public class Main {
public static void main(String[] args) {
Animal animal1 = new Dog();
Animal animal2 = new Cat();
animal1.makeSound(); // 輸出:狗在汪汪叫
animal2.makeSound(); // 輸出:貓在喵喵叫
}
}
在上述例子中,Animal類是父類,Dog和Cat是兩個子類。通過使用父類類型的引用變量animal1和animal2,分別指向Dog和Cat的實例。然后調(diào)用makeSound方法時,實際上運行時會根據(jù)對象的實際類型調(diào)用對應(yīng)的方法。
Java多態(tài)是一種重要的面向?qū)ο缶幊烫匦裕试S使用父類類型的引用來指向子類對象,并在運行時動態(tài)地調(diào)用方法。多態(tài)提供了代碼的靈活性和可擴展性,使程序更易于維護和擴展。掌握多態(tài)的概念和用法,對于Java開發(fā)者來說至關(guān)重要。
感謝您閱讀本文,希望本文能幫助您理解Java多態(tài)的概念和用法。
php中的多態(tài)按字面上意思理解就是“多種形狀”,可以理解為多種表現(xiàn)形式,即“一個對外接口,多個內(nèi)部實現(xiàn)方法”;在面向?qū)ο蟮睦碚撝校鄳B(tài)性是指同一個操作作用于不同的類的實例,將產(chǎn)生不同的執(zhí)行結(jié)果。
PHP 多態(tài)
多態(tài)性是指相同的操作或函數(shù)、過程可作用于多種類型的對象上并獲得不同的結(jié)果。不同的對象,收到同一消息將可以產(chǎn)生不同的結(jié)果,這種現(xiàn)象稱為多態(tài)性。
多態(tài)性允許每個對象以適合自身的方式去響應(yīng)共同的消息。多態(tài)性增強了軟件的靈活性和重用性。
在面向?qū)ο蟮能浖_發(fā)中,多態(tài)性是最為重要的部分之一。面向?qū)ο缶幊滩⒉恢皇菍⑾嚓P(guān)的方法與數(shù)據(jù)簡單的結(jié)合起來,而是采用面向?qū)ο缶幊讨械母鞣N要素將現(xiàn)實生活中的各種情況清晰的描述出來。
多態(tài)指為不同數(shù)據(jù)類型的實體提供統(tǒng)一的接口。多態(tài)類型可以將自身所支持的操作套用到其它類型的值上。
計算機程序運行時,相同的消息可能會送給多個不同的類別之對象,而系統(tǒng)可依據(jù)對象所屬類別,引發(fā)對應(yīng)類別的方法,而有不同的行為。簡單來說,所謂多態(tài)意指相同的消息給予不同的對象會引發(fā)不同的動作。
倆個子類調(diào)用父類中同一個方法,效果不同,java中多態(tài)大多數(shù)情況因繼承而產(chǎn)生,子類繼承父類方法,然后擁有了自己的方法執(zhí)行方式,覆蓋了父類中的方法。重載也是多態(tài),不過是在同一個類中。
classa{
publicvoiddosome(){
system.out.println("父類");
}
}
classbextendsa{
publicvoiddosome(){
system.out.println("子類b");
}
classcextendsa{
publicvoiddosome(){
system.out.println("子類c");
}
classmain{
mian(){//main方法省了
ab=newb();
ac=newc();
b.dosome();
c.dosome();
}
}
}
}
五大部分。常識、言語理解、邏輯判斷、數(shù)量、資料分析。
在Java編程中,集合框架是廣泛應(yīng)用的一種數(shù)據(jù)結(jié)構(gòu),而多態(tài)是面向?qū)ο缶幊痰闹匾匦灾弧T诒疚闹校覀儗⑻接慗ava集合中多態(tài)的應(yīng)用,以及多態(tài)在面向?qū)ο缶幊讨械闹匾浴?
Java集合是一種用于存儲和操作集合數(shù)據(jù)的框架,它提供了一組接口和類,用于實現(xiàn)常見的數(shù)據(jù)結(jié)構(gòu),如列表、集合、映射等。通過使用Java集合框架,開發(fā)人員能夠高效地進行數(shù)據(jù)操作和管理。
多態(tài)是面向?qū)ο缶幊痰囊粋€重要概念,它允許一個對象以多種形態(tài)呈現(xiàn),通過不同的對象調(diào)用相同的方法,可以實現(xiàn)不同的行為。在Java集合框架中,多態(tài)性使得我們能夠以統(tǒng)一的方式操作不同類型的集合對象。
在Java中,多態(tài)性通過接口和抽象類實現(xiàn)。接口定義了一組行為,而抽象類提供了部分實現(xiàn)。通過定義接口或抽象類,可以實現(xiàn)不同類之間的統(tǒng)一調(diào)用,從而實現(xiàn)多態(tài)。
Java集合框架中使用了多態(tài)的概念,例如List接口可以實現(xiàn)多種具體的列表類,如ArrayList、LinkedList等,它們都實現(xiàn)了List接口,從而可以以統(tǒng)一的方式對列表進行操作。
另一個例子是Map接口,它可以被實現(xiàn)為不同類型的映射表,如HashMap、TreeMap等,通過Map接口可以統(tǒng)一對不同類型的映射表進行操作。
使用多態(tài)性可以提高代碼的靈活性和可擴展性,當(dāng)需要添加新的集合類型時,只需實現(xiàn)相應(yīng)的接口或繼承相應(yīng)的抽象類即可,無需修改現(xiàn)有的代碼。
同時,多態(tài)性也使得代碼更加通用和可復(fù)用,可以編寫泛型的代碼來操作不同類型的集合對象,提高了代碼的復(fù)用性和可維護性。
Java集合框架中的多態(tài)性為我們提供了一種高效、靈活的數(shù)據(jù)操作方式,通過統(tǒng)一的接口和抽象類實現(xiàn),我們可以以統(tǒng)一的方式對不同類型的集合對象進行操作,提高了代碼的可擴展性和可維護性。
是指同一操作作用于不同的對象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結(jié)果。
多態(tài)建立在類的繼承之上:
類成員的 “橫向拓展” (類成員越來越多)
類成員的 “縱向拓展” (類的行為改變,類的成員的 “版本升高”)
類成員的隱藏 (new 關(guān)鍵字)——不常用,因為理解復(fù)雜且容易出錯
類成員的重寫 (override 關(guān)鍵字)
重寫和隱藏發(fā)生的條件:函數(shù)或?qū)傩猿蓡T一致,擁有可見性(如父類的是private,那肯定不能重寫了),函數(shù)或?qū)傩院灻枰恢拢ǚ椒瑓?shù)類型,返回類型)
相同的方法不同的實現(xiàn),體現(xiàn)出多態(tài),通俗理解為:“多種狀態(tài)”,一龍生九子,九子不同 多態(tài)分為三種: 1: 方法多態(tài) 2: 類多態(tài) 3:接口多態(tài) 重寫:是覆蓋 重載:是方法名字相同,參數(shù)列表不同,參數(shù) 類型不同 接口是算多態(tài)的 舉例吧: Jbutton.addActionListener(new ActionListener(){ public void actionPerformed(){ ................ } }); 這就是屬于 接口多態(tài),實現(xiàn) 方法多態(tài): 有點類似于重載 類多態(tài): 就繼承關(guān)系
多態(tài)開關(guān)的英文簡稱是PS(polymorphic switch)