⑴ java中的多態
Java中的多態主要指兩方面:
1.方法的重載:根據相同的方法名和不同的參數形式,可以調用功能不同的方法。
2.方法的重寫:子類中方法名和參數形式、返回值類型與父類一致,可以實現方法功能的重寫。
子類重寫的方法同名覆蓋了父類中原來的方法,子類對象或上轉型對象調用該方法時,調用的是子類中重寫的方法。不同的子類中可以分別重寫功能不同的方法。
用上轉型對象調用該方法時,根據當時所控制的對象類型不同(為上轉型對象賦值不同),可以實現不同的方法功能。
⑵ java中多態一定要有覆蓋嗎不能直接用父類的引用直接調用子類中不是覆蓋的函數嗎
所謂多態,在類裡面是通過方法的重載來實現。在父子類之間,通過重寫方法來實現。一般子類重寫了父類的非靜態方法,是會覆蓋掉父類的方法。靜態方法是沒有覆蓋一說。
⑶ JAVA中 為什麼說 方法的覆蓋 是多態的一種.
對,在java中有兩種多態,一種是方法重寫override另外一種是方法重載,就是在同一個類裡面參數不同,方法簽名相同,重寫是在父類和子類之間的一種多態,子類必須擁有父類方法的實現
⑷ java多態中的重載於覆蓋有什麼不同
好吧!重載必須在同一個類中,比如兩個成員方法是重載關系,要求他們對應位置上的參數類型不同或是要求兩個方法參數個數不同(兩條件只要滿足一個就行),重載與方法的返回類型無關,
然後覆蓋是指在子類中出現了與父類相同的成員方法,要求這兩個方法的參數和返回類型都相同,關於修飾許可權,是子類的許可權永遠大於等於父類,比如父類是public,子類只能是public,但是如果父類是private,子類可以是private,protected,public,
最後要注意的是父類(對於子類)可訪問的東東等於是子類的(相當於同一個類中),如果在覆蓋時,(子類父類中有同名方法)如果子類的同名方法的參數與父類不同,覆蓋就變成重載了..
⑸ Java語言中,說明覆蓋、種載和多態之間的區別
覆蓋和重載的意思是一樣的子類繼承了父類後有不同的實現方式所以就重載了父類的方法這樣也就覆蓋了父類的方法多態:如類A繼承了類B 並實現了介面C和介面D這樣A是B類型、C類型、D類型這樣多態
⑹ JAVA 多態性覆蓋 學長們教教我吧
你想調用父類方法就創建一個父類的對象不就行了。
Super sup = new Child();
sup 聲明的是父類對象,但用子類來初始化 。
這就是「變數指向的是一個子類對象」。
⑺ java 多態 覆蓋
既然問到覆蓋那麼說明你對多態,繼承都有一個大概的了解,為了便於解釋,我們還是舉個例子吧
假設有一個父類圖形Graphical.java。有兩個子類繼承他,分別是,正方形(Square.java),長方形(Rectangular.java)
classGraphical{
publicvoiddisplay(){
System.out.println("這是一個形狀。");
}
}
{
}
classSquareextendsGraphical{
publicvoiddisplay(){
System.out.println("這是一個正方形。");
}
}
publicclassOverrideTest{
publicstaticvoidmain(String[]args){
Graphicalrectangular=newRectangular();
rectangular.display();
Graphicalsquare=newSquare();
square.display();
}
}
運行之後可以看到,第一行輸出"這是一個形狀。",第二行輸出"這是一個正方形。"
因為Rectangular 類直接繼承自Graphical沒有做任何操作,所以直接繼承了display這個方法,
而Square 類定義了一個和父類一模一樣的方法(這就是重寫),這時候調用display用的就是子類的而不是父類的,所有這里說display這個方法被覆蓋了。
重寫和覆蓋是一個意思,不同的書上可能會用不同的表述(Override)
面試的時候可能會問重載(Overload)和重寫(Override)的區別,一樓已經回答了
⑻ java的多態怎麼實現
實現多態的三個條件(前提條件,向上轉型、向下轉型)
1、繼承的存在;(繼承是多態的基礎,沒有繼承就沒有多態)
2、子類重寫父類的方法。(多態下會調用子類重寫後的方法)
3、父類引用變數指向子類對象。(涉及子類到父類的類型轉換)
向上轉型 Student person = new Student()
將一個父類的引用指向一個子類對象,成為向上轉型,自動進行類型轉換。此時通過父類引用變數調用的方法是子類覆蓋或繼承父類的方法,而不是父類的方法此時通過父類引用變數無法調用子類特有的方法。
向下轉型 Student stu = (Student)person;
將一個指向子類對象的引用賦給一個子類的引用,成為向下轉型,此時必須進行強制類型轉換。向下轉型必須轉換為父類引用指向的真實子類類型,,否則將出現ClassCastException,不是任意的強制轉換
向下轉型時可以結合使用instanceof運算符進行強制類型轉換,比如出現轉換異常---ClassCastException
⑼ JAVA多態中的隱藏和覆蓋
Java的引用變數有兩個類型,一個是編譯時類型,一個是運行時類型
編譯時類型:由聲明該變數時使用的類型決定
運行時類型:由該變數指向的對象類型決定
如果編譯時類型和運行時類型不一致,會出現所謂的多態。因為子類其實是一種特殊的父類,因此java允許把一個子類對象直接賦值給一個父類引用變數,無須任何類型轉換,或者被稱為向上轉型,由系統自動完成。
如 Father f = new Son(); Son是Father的子類
引用變數f就會出現編譯時類型和運行時類型不一致的情況 編譯時是Father類型的 運行時是Son類型的
當變數的編譯時類型和運行時類型不一致時,通過變數訪問它所引用的對象的實例時,該實例變數的值由聲明該變數的類型決定。
通過變數訪問它所引用的對象的方法時,該方法的行為由所引用的對象實際類型所決定。