本篇內容主要講解“Java多態(tài)性怎么理解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java多態(tài)性怎么理解”吧!
創(chuàng)新互聯(lián)是一家專注于網站設計、成都網站制作與策劃設計,成都網站建設哪家好?創(chuàng)新互聯(lián)做網站,專注于網站建設十余年,網設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:成都等地區(qū)。成都做網站價格咨詢:028-86922220
面向對象編程有三個特征,即封裝、繼承和多態(tài)。
封裝隱藏了類的內部實現(xiàn)機制,從而可以在不影響使用者的前提下改變類的內部結構,同時保護了數(shù)據(jù)。
繼承是為了重用父類代碼,同時為實現(xiàn)多態(tài)性作準備。那么什么是多態(tài)呢?
方法的重寫、重載與動態(tài)連接構成多態(tài)性。Java之所以引入多態(tài)的概念,原因之一是它在類的繼承問題上和C++不同,后者允許多繼承,這確實給其帶來的非常強大的功能,但是復雜的繼承關系也給C++開發(fā)者帶來了更大的麻煩,為了規(guī)避風險,Java只允許單繼承,派生類與基類間有IS-A的關系(即“貓”is a “動物”)。
這樣做雖然保證了繼承關系的簡單明了,但是勢必在功能上有很大的限制,所以,Java引入了多態(tài)性的概念以彌補這點的不足,此外,抽象類和接口也是解決單繼承規(guī)定限制的重要手段。同時,多態(tài)也是面向對象編程的精髓所在。
要理解多態(tài)性,首先要知道什么是“向上轉型”。
我定義了一個子類Cat,它繼承了Animal類,那么后者就是前者是父類。我可以通過
Cat c = new Cat();
實例化一個Cat的對象,這個不難理解。但當我這樣定義時:
Animal a = new Cat();
這代表什么意思呢?
很簡單,它表示我定義了一個Animal類型的引用,指向新建的Cat類型的對象。由于Cat是繼承自它的父類Animal,所以Animal類型的引用是可以指向Cat類型的對象的。那么這樣做有什么意義呢?因為子類是對父類的一個改進和擴充,所以一般子類在功能上較父類更強大,屬性較父類更獨特,
定義一個父類類型的引用指向一個子類的對象既可以使用子類強大的功能,又可以抽取父類的共性。所以,父類類型的引用可以調用父類中定義的所有屬性和方法,而對于子類中定義而父類中沒有的方法,它是無可奈何的;同時,父類中的一個方法只有在在父類中定義而在子類中沒有重寫的情況下,才可以被父類類型的引用調用;對于父類中定義的方法,如果子類中重寫了該方法,那么父類類型的引用將會調用子類中的這個方法,這就是動態(tài)連接。
看下面這段程序:
class Father{ public void func1(){ func2(); } //這是父類中的func2()方法,因為下面的子類中重寫了該方法 //所以在父類類型的引用中調用時,這個方法將不再有效 //取而代之的是將調用子類中重寫的func2()方法 public void func2(){ System.out.println("AAA"); } } class Child extends Father{ //func1(int i)是對func1()方法的一個重載 //由于在父類中沒有定義這個方法,所以它不能被父類類型的引用調用 //所以在下面的main方法中child.func1(68)是不對的 public void func1(int i){ System.out.println("BBB"); } //func2()重寫了父類Father中的func2()方法 //如果父類類型的引用中調用了func2()方法,那么必然是子類中重寫的這個方法 public void func2(){ System.out.println("CCC"); } } public class PolymorphismTest { public static void main(String[] args) { Father child = new Child(); child.func1();//打印結果將會是什么? } }
上面的程序是個很典型的多態(tài)的例子。子類Child繼承了父類Father,并重載了父類的func1()方法,重寫了父類的func2()方法。重載后的func1(int i)和func1()不再是同一個方法,由于父類中沒有func1(int i),那么,父類類型的引用child就不能調用func1(int i)方法。而子類重寫了func2()方法,那么父類類型的引用child在調用該方法時將會調用子類中重寫的func2()。
那么該程序將會打印出什么樣的結果呢?
很顯然,應該是“CCC”。
對于多態(tài),可以總結它為:
一、使用父類類型的引用指向子類的對象;
二、該引用只能調用父類中定義的方法和變量;
三、如果子類中重寫了父類中的一個方法,那么在調用這個方法的時候,將會調用子類中的這個方法;(動態(tài)連接、動態(tài)調用)
四、變量不能被重寫(覆蓋),”重寫“的概念只針對方法,如果在子類中”重寫“了父類中的變量,那么在編譯時會報錯。
到此,相信大家對“Java多態(tài)性怎么理解”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
當前文章:Java多態(tài)性怎么理解
當前路徑:http://jinyejixie.com/article18/jjhgdp.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站制作、、網頁設計公司、標簽優(yōu)化、網站策劃、定制網站
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)