Java編程語言:Java的類型轉(zhuǎn)換與多態(tài)

對于Java語言應(yīng)該都不陌生,今天我們就將Java中的入門部分概念做一具體的講解一下揭朝。

1.什么叫JVM,JRE,JDK?

JRE

全稱為JavaRunningEnvironment庐舟,就是我們所說的java運行環(huán)境,由java虛擬機(jī)和一些核心的類庫文件組成欣除。

JVM

全稱為JavaVirtualMachine(java虛擬機(jī)),是java運行環(huán)境的一部分挪略。

JDK

全稱為JavaDevelopmentKit,java開發(fā)工具包历帚。

2.標(biāo)識符及其所需注意事項

1.標(biāo)識符可以由字母、數(shù)字杠娱、下劃線挽牢、美元符號組成,但不能包含@摊求,%禽拔,空格等特殊字符,不能以字母開頭。

2.標(biāo)識符不是能是java的關(guān)鍵字和保留字奏赘,但可以包含關(guān)鍵字寥闪。

3.標(biāo)識符嚴(yán)格區(qū)分大小寫。

小編推薦一個學(xué)JAVA的學(xué)習(xí)裙【 一三三磨淌,九三零疲憋,六九三】,無論你是大牛還是小白梁只,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)缚柳!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享搪锣!

正題

我們之前使用類創(chuàng)造新的類型(type)秋忙,并使用繼承來便利我們創(chuàng)建類的過程。我將在這一講中深入類型构舟,并介紹多態(tài)(polymorphism)的概念灰追。

Java的任意變量和引用經(jīng)過類型聲明(type declaration),才能使用狗超。我們之前見過對象數(shù)據(jù)弹澎、類數(shù)據(jù)、方法參數(shù)努咐、方法返回值以及方法內(nèi)部的自動變量苦蒿,它們都需要聲明其類型。Java是一種強(qiáng)類型(strongly typing)語言渗稍,它會對類型進(jìn)行檢查佩迟。如果我們錯誤的使用類型,將造成錯誤竿屹。

比如在下面的Test類中报强,我們將一個Cup類對象賦予給aPerson類引用:

javac將返回:

found : Cup

required: Human

aPerson =newCup;^1 errorJava可以對基本類型的變量進(jìn)行類型轉(zhuǎn)換。不同的基本類型有不同的長度和存儲范圍拱燃。如果我們從一個高精度類型轉(zhuǎn)換到低精度類型秉溉,比如從float轉(zhuǎn)換到int,那么我們有可能會損失信息扼雏。這樣的轉(zhuǎn)換叫做收縮變換(narrowingconversion)坚嗜。這種情況下夯膀,我們需要顯示的聲明類型轉(zhuǎn)換诗充,

比如:如果我們從低精度類型轉(zhuǎn)換成高精度類型,則不存在信息損失的顧慮诱建。這樣的變換叫做寬松變換(wideningconversion)蝴蜓。我們不需要顯示的要求類型轉(zhuǎn)換,Java可以自動進(jìn)行:

在Java中,引用也可以進(jìn)行類型轉(zhuǎn)換茎匠,但是有限制格仲。我們可以將一個衍生類引用轉(zhuǎn)換為其基類引用,這叫做向上轉(zhuǎn)換(upcast)或者寬松轉(zhuǎn)換诵冒。下面的BrokenCup類繼承自Cup類凯肋,并覆蓋了Cup類中原有的addWater和drinkWater方法:

程序運行結(jié)果:

shit, broken cup

在上面可以看到,不需要任何顯示說明汽馋,我們將衍生類引用aBrokenCup賦予給它的基類引用aCup侮东。類型轉(zhuǎn)換將由Java自動進(jìn)行。

我們隨后調(diào)用了aCup(我們聲明它為Cup類型)的addWater方法豹芯。盡管aCup是Cup類型的引用悄雅,它實際上調(diào)用的是BrokenCup的addWater方法!也就是說铁蹈,即使我們經(jīng)過upcast宽闲,將引用的類型寬松為其基類,Java依然能正確的識別對象本身的類型握牧,并調(diào)用正確的方法容诬。Java可以根據(jù)當(dāng)前狀況,識別對象的真實類型我碟,這叫做多態(tài)(polymorphism)放案。多態(tài)是面向?qū)ο蟮囊粋€重要方面。

多態(tài)是Java的支持的一種機(jī)制矫俺,同時也是面向?qū)ο蟮囊粋€重要概念吱殉。這提出了一個分類學(xué)的問題,既子類對象實際上“是”父類對象厘托。比如一只鳥友雳,也是一個動物;一輛汽車铅匹,也必然是一個交通工具。Java告訴我們流礁,一個衍生類對象可以當(dāng)做一個基類對象使用萌抵,而Java會正確的處理這種情況霎桅。

比如下面的繼承關(guān)系:小編推薦一個學(xué)JAVA的學(xué)習(xí)裙【 一三三,九三零,六九三】杠巡,無論你是大牛還是小白锨侯,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具奕谭,很多干貨和技術(shù)資料分享生兆!

我們可以說用杯子(Cup)喝水(drinkWater)。實際上,喝水這個動作具體含義會在衍生類中發(fā)生很大變換。比如用吸管喝水,和從一個破杯子喝水,這兩個動作差別會很大,雖然我們抽象中都講“喝水”键闺。我們當(dāng)然可以針對每個衍生類分別編程寿烟,調(diào)用不同的drinkWater方法。然而辛燥,作為程序員筛武,我們可以對杯子編程,調(diào)用Cup的drinkWater方法挎塌,而無論這個杯子是什么樣的衍生類杯子徘六。Java會調(diào)用相應(yīng)的正確方法,正如我們在上面程序中看到的榴都。

看一個更加有意義的例子待锈,我們給Human類增加一個drink方法,這個方法接收一個杯子對象和一個整數(shù)作為參數(shù)嘴高。整數(shù)表示喝水的水量:

程序運行結(jié)果:

shit, no water inside

我們在Human類的drink的定義中竿音,要求第一個參量為Cup類型的引用。但在實際運用時(Test類)拴驮,將Cup的BrokenCup衍生類對象谍失。這實際上是將hisCup向上轉(zhuǎn)型稱為Cup類,傳遞給drink方法莹汤。在方法中快鱼,我們調(diào)用了drinkWater方法。Java發(fā)現(xiàn)這個對象實際上是BrokenCup對象纲岭,所以實際調(diào)用了BrokenCup的相應(yīng)方法抹竹。

我們可以將一個基類引用向下轉(zhuǎn)型(downcast)成為衍生類的引用,但要求該基類引用所指向的對象止潮,已經(jīng)是所要downcast的衍生類對象窃判。比如可以將上面的hisCup向上轉(zhuǎn)型為Cup類引用后,再向下轉(zhuǎn)型成為BrokenCup類引用喇闸。

Java中袄琳,所有的類實際上都有一個共同的繼承祖先询件,即Object類。Object類提供了一些方法唆樊,比如toString宛琅。我們可以在自己的類定義中覆蓋這些方法。

我們可以編寫一個操作Object對象的程序逗旁,就可以通過upcast嘿辟,將任意對象傳遞給該程序。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末片效,一起剝皮案震驚了整個濱河市红伦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌淀衣,老刑警劉巖昙读,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異膨桥,居然都是意外死亡箕戳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門国撵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陵吸,“玉大人,你說我怎么就攤上這事介牙∽吵妫” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵环础,是天一觀的道長囚似。 經(jīng)常有香客問我,道長线得,這世上最難降的妖魔是什么饶唤? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮贯钩,結(jié)果婚禮上募狂,老公的妹妹穿的比我還像新娘。我一直安慰自己角雷,他們只是感情好祸穷,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著勺三,像睡著了一般雷滚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吗坚,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天祈远,我揣著相機(jī)與錄音呆万,去河邊找鬼。 笑死车份,一個胖子當(dāng)著我的面吹牛谋减,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播躬充,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼充甚!你這毒婦竟也來了霸褒?” 一聲冷哼從身側(cè)響起废菱,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤殊轴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后樊零,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體孽文,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡芋哭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年减牺,在試婚紗的時候發(fā)現(xiàn)自己被綠了拔疚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡巷屿,死狀恐怖墩虹,靈堂內(nèi)的尸體忽然破棺而出憨琳,到底是詐尸還是另有隱情旬昭,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布遍略,位于F島的核電站骤坐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蕾久。R本人自食惡果不足惜僧著,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一盹愚、第九天 我趴在偏房一處隱蔽的房頂上張望站故。 院中可真熱鬧世蔗,春花似錦、人聲如沸顶滩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仅醇。三九已至魔种,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背属韧。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工蛤吓, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人会傲。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓锅棕,卻偏偏與公主長得像淌山,于是被迫代替她去往敵國和親裸燎。 傳聞我的和親對象是個殘疾皇子艾岂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一顺少、Java 簡介 Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計...
    子非魚_t_閱讀 4,195評論 1 44
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 29,395評論 8 265
  • (一)Java部分 1朋其、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,111評論 0 62
  • 謝晶,10年單反拍攝經(jīng)歷,從公司小老板轉(zhuǎn)變?yōu)橛H子攝影師袱蚓。作品風(fēng)格自然明朗,擅長在日常平凡的場景中發(fā)現(xiàn)詩意的美,捕捉...
    謝晶親子攝影閱讀 722評論 0 0
  • 過度的比較颖低,會讓自己迷失絮吵;一味地奔跑,容易看不清方向莺戒。想至千里伴嗡,先積跬步;想成大海从铲,先納溪流瘪校,每天都回頭看看,和昨...
    雪珊瑚閱讀 191評論 0 0