什麼是java多態
㈠ java里多態是什麼
多態性是指允許不同類的對象對同一消息 作出響應。多態性包括參數化多態性和包 含多態性。多態性語言具有靈活、抽象、 行為共享、代碼共享的優勢,很好的解決 了應用程序函數同名問題。 多態有兩種表現形式:重載和覆蓋 首先說重載(overload),是發生在同一 類中。與什麼父類子類、繼承毫無關系。
㈡ 在java中,什麼是多態多態是用來做什麼的
多態是一種編程技巧
它增加論了程序的可擴展性
比如你要做個籃子放水果,你當然不希望造這樣的籃子--蘋果籃子,橘子籃子,梨籃子,正常人都會想,麻煩啊,我就造個籃子,什麼都能放,幹嘛造那麼多啊?
回歸程序:你造個籃子 basket();參數是水果 fruit,這樣你調用的時候就可以這樣 basket(fruit f);然後往裡放蘋果啊,梨啊,什麼都行,只要是水果類的子類
好處:這樣設計你的程序,等你的參數變了的時候,只要還是水果,你就不用去改程序了,這就是可擴展性的體現
㈢ java中多態性什麼意思
多態性:顧名思義就是擁有「多種形態」的含義,是指屬性或方法在子類中表現為多種形態。
在JAVA中有兩種多態是指:運行時多態和編譯時多態。多態性是面向對象的核心特徵之一,類的多態性提供類中成員設計的靈活性和方法執行的多樣性。
多態指允許不同類的對象對同一消息做出響應。即同一消息可以根據發送對象的不同而採用多種不同的行為方式。(發送消息就是函數調用)
實現多態的技術稱為:動態綁定(dynamic binding),是指在執行期間判斷所引用對象的實際類型,根據其實際的類型調用其相應的方法。
擴展資料:
多態的好處:
1、可替換性(substitutability)多態對已存在代碼具有可替換性。例如,多態對圓Circle類工作,對其他任何圓形幾何體,如圓環,也同樣工作。
2、可擴充性(extensibility)多態對代碼具有可擴充性。增加新的子類不影響已存在類的多態性、繼承性,以及其他特性的運行和操作。實際上新加子類更容易獲得多態功能。
3、介面性(interface-ability)多態是超類通過方法簽名,向子類提供了一個共同介面,由子類來完善或者覆蓋它而實現的。
4、靈活性(flexibility)它在應用中體現了靈活多樣的操作,提高了使用效率。
5、簡化性(simplicity)多態簡化對應用軟體的代碼編寫和修改過程,尤其在處理大量對象的運算和操作時,這個特點尤為突出和重要。
㈣ 什麼是Java的多態
什麼是多態
面向對象的三大特性:封裝、繼承、多態。從一定角度來看,封裝和繼承幾乎都是為多態而准備的。這是我們最後一個概念,也是最重要的知識點。
多態的定義:指允許不同類的對象對同一消息做出響應。即同一消息可以根據發送對象的不同而採用多種不同的行為方式。(發送消息就是函數調用)
實現多態的技術稱為:動態綁定(dynamic binding),是指在執行期間判斷所引用對象的實際類型,根據其實際的類型調用其相應的方法。
多態的作用:消除類型之間的耦合關系。
現實中,關於多態的例子不勝枚舉。比方說按下 F1 鍵這個動作,如果當前在 Flash 界面下彈出的就是 AS 3 的幫助文檔;如果當前在 Word 下彈出的就是 Word 幫助;在 Windows 下彈出的就是 Windows 幫助和支持。同一個事件發生在不同的對象上會產生不同的結果。
㈤ 在java中什麼是多態。。 什麼時候用多態
多態,顧名思義就是具有很多種形態,你可以聯想到一種物質有很多種狀態、形態,例如水,有氣態、液態、固態,然後回歸到編程,假如我們需要編程來實現對水的質量進行計算,在假設質量=密度*體積。可是怎麼樣才能把所有形態、狀態的水都能計算出來,這是就要分不同種情況了,假設是氣態,這樣就跟壓強(假設的)有關系了,所以成員方法參數為壓強、體積、密度。而液態的就有可能跟溫度(假設的)關系比較大,所以成員方法中的參數為溫度、體積、密度。而固態跟溫度和壓強(假設的啦)關系不大,那麼成員方法的參數為體積、密度。這樣計算水的質量就有3種計算公式了,雖然是不同的3條公式,但是他們殊途同歸,最後都是求質量。
綜上,多態就是為了解決同一問題的不同解決方式。使用前提就是一個對象(類)有多種情況,然後分情況進行解決。
㈥ Java多態是什麼
多態是編程語言給不同的底層數據類型做相同的介面展示的一種能力。一個多態類型上的操作可以應用到其他類型的值上面。
㈦ 什麼叫做多態在java中
在JAVA中有兩種多態是指:運行時多態和編譯時多態。
關於類的多態性簡介如下:
多態(polymorphism)意為一個名字可具有多種語義.在程序設計語言中,多態性是指」一種定義,多種實現」.例如,運算符+有多種含義,究竟執行哪種運算取決於參加運算的操作數類型:
1+2 //加法運算符
「1」 + 「2」 //字元串連接運算,操作數是字元串
多態性是面向對象的核心特徵之一,類的多態性提供類中成員設計的靈活性和方法執行的多樣性.
1、類多態性表現
(1)方法重載
重載表現為同一個類中方法的多態性.一個類生命多個重載方法就是為一種功能提供多種實現.編譯時,根據方法實際參數的數據類型\個數和次序,決定究竟應該執行重載方法中的哪一個.
(2)子類重定義從父類繼承來的成員
當子類從父類繼承來的成員不適合子類時,子類不能刪除它們,但可以重定義它們,使弗雷成員適應子類的新需求.子類重定義父類成員,同名成員在父類與子類之間表現出多態性,父類對象引用父類成員,子類對象引用子類成員,不會產生沖突和混亂.
子類可重定義父類的同名成員變數,稱子類隱藏父類成員變數.子類也可以重定義父類的同名成員方法,當子類方法的參數列表與父類方法參數列表完全相同時,稱為子類方法覆蓋(override)父類方法。覆蓋父類方法時,子類方法的訪問許可權不能小於父類方法的許可權。
由於Object類的equals()方法比較兩個對象的引用是否相等而不是值是否相等,因此一個類要覆蓋Object類的equals()方法,提供本類兩個對象比較相等方法.
覆蓋表現為父類與子類之間方法的多態性.java 尋找執行方法的原則是:從對象所屬的類開始,尋找匹配的方法執行,如果當前類中沒有匹配的方法,則逐層向上依次在父類或祖先類中尋找匹配方法,直到Object類.
2、super 引用
在子類的成員方法中,可以使用代詞super引用父類成員.super引用的語法如下:
super([參數列表]) //在子類的構造方法體中,調用父類的構造方法
super.成員變數 //當子類隱藏父類成員變數時,引用父類同名成員變數
super.成員方法([參數列表]) //當子類覆蓋父類成員方法時,調用父類同名成員方法
*注意:super引用沒有單獨使用的語法
3、多態性有兩種:
1)編譯時多態性
對於多個同名方法,如果在編譯時能夠確定執行同名方法中的哪一個,則稱為編譯時多態性.
2)運行時多態性
如果在編譯時不能確定,只能在運行時才能確定執行多個同名方法中的哪一個,則稱為運行時多態性.
方法覆蓋表現出兩種多態性,當對象獲得本類實例時,為編譯時多態性,否則為運行時多態性,例如:
XXXX x1 = new XXXX(參數列表); //對象獲得本類實例,對象與其引用的實例類型一致
XXX xx1 = new XXX(參數列表);
x1.toString(); //編譯時多態性,執行XXX類的方法.
xx1.toString(); //編譯時多態性,執行XXXX類覆蓋的方法.
XXXX為XXX的父類.
由於子類對象既是父類對象,父類對象與子類對象之間具有賦值相容性,父類對象能夠被賦值為子類對象.例如,
XXXX x2 = new XXX(參數列表); //父類對象獲得子類實例,子類對象即是父類對象
x2.toString(); //運行時多態
x2聲明為父類對象卻獲得子類XXX的實例,那麼x2.toString()究竟執行父類方法還是執行子類覆蓋的方法呢?
這分為兩種情況:
取決於子類是否覆蓋父類方法.如果子類覆蓋父類方法,則執行子類方法;
如果沒有覆蓋,則執行父類方法.
在編譯時,僅僅依據對象所屬的類,系統無法確定到底應該執行那個類的方法,只有運行時才能確定,因此這是運行時多態.
父類對象並不能執行所有的子類方法,只能執行那些父類中聲明\子類覆蓋的子類方法.
㈧ java中多態的概念是什麼
class Wine {
public void fun1(){
System.out.println("Wine 的Fun.....");
fun2();
}
public void fun2(){
System.out.println("Wine 的Fun2...");
}
}
class JNC extends Wine{
/**
* @desc 子類重載父類方法
* 父類中不存在該方法,向上轉型後,父類是不能引用該方法的
* @param a
* @return void
*/
public void fun1(String a){
System.out.println("JNC 的 Fun1...");
fun2();
}
/**
* 子類重寫父類方法
* 指向子類的父類引用調用fun2時,必定是調用該方法
*/
public void fun2(){
System.out.println("JNC 的Fun2...");
}
}
public class test24 {
public static void main(String[] args) {
Wine a = new JNC();
a.fun1();
}
}
分析:在這個程序中子類JNC重載了父類Wine的方法fun1(),重寫fun2(),而且重載後的fun1(String a)與 fun1()不是同一個方法,由於父類中沒有該方法,向上轉型後會丟失該方法,所以執行JNC的Wine類型引用是不能引用fun1(String a)方法。而子類JNC重寫了fun2() ,那麼指向JNC的Wine引用會調用JNC中fun2()方法。
所以對於多態我們可以總結如下:
指向子類的父類引用由於向上轉型了,它只能訪問父類中擁有的方法和屬性,而對於子類中存在而父類中不存在的方法,該引用是不能使用的,盡管是重載該方法。若子類重寫了父類中的某些方法,在調用該些方法的時候,必定是使用子類中定義的這些方法(動態連接、動態調用)。
㈨ java描述一下什麼是多態
/*1.要有繼承關系2.子類要重寫父類的方法3.父類的引用指向子類的對象或者借口的引用指向遵從借口的類對象*/
//父類
classAnimal{
intnum=5;
staticintage=2;
publicvoideat(){
System.out.println("動物在吃東西");
}
publicstaticvoidsleep(){
System.out.println("動物在睡大覺");
}
publicvoidrun(){
System.out.println("動物在亂躥");
}
}
//子類sloth樹獺
classslothextendsanimal{
intnum=10;
staticintage=8;
Stringname="sloth";
publicvoideat(){
system.out.println("樹獺進餐");
}
publicstaticvoidsleep(){
system.out.println("有事沒事就睡一覺");
}
publicvoidjump(){
system.out.println("跳躍不存在的");
}
}
//列印結果
classdemo1{
publicstaticvoidmain(String[]args){
Animalani=newsloth();
ani.eat();
ani.sleep();
ani.run();
System.out.println(ani.num);
System.out.println(sni.age);
}
}
//純手打多敲幾遍就明白了看著結果琢磨琢磨或者上CSDN狠全面的都是大佬
㈩ java中多態具體是什麼
首先表明觀點,重載不是java多態的一種體現。
java的多態是指在程序運行過程中由虛擬機確定到底該使用哪種形態完成指定行為的一個過程。如下:
Parent p = new Son();
p.speak();
如果在Son中對父類speak()方法進行了重寫,那麼當你代碼寫到這里時,編譯器是不知道要執行Parent中的speak()還是Son中的speak()方法的,編譯器只知道這樣寫不會發生語法錯誤;只有在運行過程中才會根據實際在內存中(堆)創建的對象去執行相應的方法
如果重載是多態,那我問你,當你在代碼中寫上某個重載的方法後,此時編譯器不是已經確定了到底是哪個方法在完成你的功能嗎?這僅僅是編譯期,程序還沒有運行呢。
我還看到一些關於多態的其他說法,比如:編譯時多態,運行時多態。而這種觀點普遍認為重載就是多態體現的一種,因為重載算是編譯時多態,而運行時多態中就是我上面寫的那個例子。
借用一句《Java編程思想》作者Bruce Eckel的話:"不要犯傻,如果它不是晚綁定,它就不是多態"。這里的晚綁定就是指動態綁定,早綁定就是指靜態綁定,也就是所謂的重載。
具體如何理解,網上關於這方面的討論一大堆,各位自行參考。