⑴ java中多態和抽象的區別
你搞錯了因果關系。多態與抽象沒有必然關聯。抽象是語法,多態是用法,不用抽象也能實現多態。
抽象是為了限制new 對象。抽象類不能new出來,只能通過子類(包括匿名實現類)來創建。
抽象的意思是當前對象不存在實體。是對實體的抽象。
⑵ java的多態怎麼實現
這幾天我在重新復習語言基礎,雖然和團隊一起,自己個人都進行了實際項目的開發,但越往上面走越覺得自己應該花點時間看看Java的基礎知識,鞏固一下基礎。今天復習的是多態,同時寫下自己的學習心得。
數據抽象、繼承和多態是面向對象程序設計語言的三大特性。多態,我覺得它的作用就是用來將介面和實現分離開,改善代碼的組織結構,增強代碼的可讀性。在某些很簡單的情況下,或許我們不使用多態也能開發出滿足我們需要的程序,但大多數情況,如果沒有多態,就會覺得代碼極其難以維護。
在Java中,談論多態就是在討論方法調用的綁定,綁定就是將一個方法調用同一個方法主體關聯起來。在C語言中,方法(在C中稱為函數)的綁定是由編譯器來實現的,在英文中稱為early binding(前期綁定),因此,大家自然就會想到相對應的late binding(後期綁定),這在Java中通常叫做run-time binding(運行時綁定),我個人覺得這樣稱呼更貼切,運行時綁定的目的就是在代碼運行的時候能夠判斷對象的類型。通過一個簡單的例子說明:
/**
* 定義一個基類
*/
public Class Parents {
public void print() {
System.out.println(「parents」);
}
}
/**
* 定義兩個派生類
*/
public Class Father extends Parents {
public void print() {
System.out.println(「father」);
}
}
public Class Mother extends Parents {
public void print() {
System.out.println(「mother」);
}
}
/**
* 測試輸出結果的類
*/
public Class Test {
public void find(Parents p) {
p.print();
}
public static void main(String[] args) {
Test t = new Test();
Father f = new Father();
Mother m = new Mother();
t.find(f);
t.find(m);
}
}
最後的輸出結果分別是father和mother,將派生類的引用傳給基類的引用,然後調用重寫方法,基類的引用之所以能夠找到應該調用那個派生類的方法,就是因為程序在運行時進行了綁定。
學過Java基礎的人都能很容易理解上面的代碼和多態的原理,但是仍有一些關鍵的地方需要注意的,算是自己對多態的一個小結:
1. Java中除了static和final方法外,其他所有的方法都是運行時綁定的。在我另外一篇文章中說到private方法都被隱式指定為final的,因此final的方法不會在運行時綁定。當在派生類中重寫基類中static、final、或private方法時,實質上是創建了一個新的方法。
2.在派生類中,對於基類中的private方法,最好採用不同的名字。
3.包含抽象方法的類叫做抽象類。注意定義裡麵包含這樣的意思,只要類中包含一個抽象方法,該類就是抽象類。抽象類在派生中就是作為基類的角色,為不同的子類提供通用的介面。
4.對象清理的順序和創建的順序相反,當然前提是自己想手動清理對象,因為大家都知道Java垃圾回收器。
5.在基類的構造方法中小心調用基類中被重寫的方法,這里涉及到對象初始化順序。
6.構造方法是被隱式聲明為static方法。
7.用繼承表達行為間的差異,用欄位表達狀態上的變化。
⑶ java實現多態有幾種方式分別是什麼
首先,多態存在的三個必要條件
一、要有繼承;版
二、要有重寫;
三、父類引用指向子權類對象。
多態引用類型有兩種方式:
a. 編譯時多態:方法的重載;
b. 運行時多態:JAVA運行時系統根據調用該方法的實例的類型來決定選擇調用哪個方法則被稱為運行時多態。(我們平時說得多的事運行時多態,所以多態主要也是指運行時多態);
⑷ java中什麼是抽象類和抽象方法創建有何作用
使用了關鍵詞abstract聲明的類叫作"抽象類"。如果一個類里包含了一個或多個抽象方法,類就必須指定成abstract(抽象)。"抽象方法",屬於一種不完整的方法,只含有一個聲明,沒有方法主體。
java抽象類的作用:
1、通過繼承它實現多態,後期綁定,可以為將來要實現的東西做好介面,實現重用性。
2、介面就是更純粹的抽象類。
⑸ 北大青鳥java培訓:java繼承多態和抽象類介面
一、繼承通過擴展一個已有的類,並繼承該類的屬性和行為,來創建一個新的類。
已有的稱為父類,新的類稱為子類(父類派生子類,子類繼承父類)。
(1)繼承的優點:①代碼的可重用性;②父類的屬性的方法可用於子類;③子類可擴展父類的屬性和方法;④設計應用程序變得更加簡單。
(2)關鍵字「isa」用於判斷父類和子類的繼承關系是否正確。
(3)Java中繼承的實現:publicclass子類extends父類{}(4)繼承的單根性:在Java中一個類只能有一個父類;傳遞性:一個Java類可以父類,父類也可以有父類。
(5)所有類的根類:Object類,又叫基類或超類。
Object類是每個Java類的父類,要麼是直接的父類,要麼就是間接的父類。
Object類中的三個重要方法:①publicbooleanequals(Objectx):檢測兩個對象是否相等。
該方法經常被重寫。
若兩個對象通過該方法判斷是相等的,那麼兩個對象的hashCode()方法應該產生相同的哈希碼②publicStringtoString:該方法返回對象的字元串表示。
用字元串來表示對象有助於調試或測試。
③protectedvoidfinalize()throwsThrowale:該方法在對象將要被垃圾回收時調用。
(6)方法重寫:子類可以重寫從父類繼承的方法,從而允許子類添加或者改變父類中方法的行為。
該行為方法生在子類中,對父類方法重寫。
子類重寫父類方法時,浙江北大青鳥http://www.kmbdqn.cn/認為必須遵循如下規則:①子類的方法的返回值類型、方法名和形式參數列表必須和父類中的是相同的;②訪問修飾符必須不小於父類中的訪問修飾符;③子類中重寫拋出的異常不能比父類中拋出的異常多。