亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java基礎----類型轉換與多態

2019-11-06 06:52:54
字體:
來源:轉載
供稿:網友

學習java的同學注意了?。。?nbsp;學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Java學習交流群,群號碼:523047986  我們一起學Java!

我們之前使用類創造新的類型(type),并使用繼承來便利我們創建類的過程。我將在這一講中深入類型,并介紹多態(polymorphism)的概念。

類型檢查

Java的任意變量和引用經過類型聲明(type declaration),才能使用。我們之前見過對象數據、類數據、方法參數、方法返回值以及方法內部的自動變量,它們都需要聲明其類型。Java是一種強類型(strongly typing)語言,它會對類型進行檢查。如果我們錯誤的使用類型,將造成錯誤。

 類型不符,賣萌無效

 

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

復制代碼
public class Test{    public static void main(String[] args)    {        Human aPerson;                    aPerson = new Cup();         }}class Human{       /**     * constructor     */    public Human(int h)    {        this.height = h;    }    /**     * accessor     */    public int getHeight()    {       return this.height;    }    /**     * mutator     */    public void growHeight(int h)    {        this.height = this.height + h;    }    PRivate int height;}class Cup {    public void addWater(int w)     {        this.water = this.water + w;    }    public void drinkWater(int w)    {        this.water = this.water - w;    }    private int water = 0;}復制代碼

javac將返回:

found   : Cuprequired: Human                aPerson = new Cup();                                       ^1 error

 

基本類型轉換

Java可以對基本類型的變量進行類型轉換。不同的基本類型有不同的長度和存儲范圍。如果我們從一個高精度類型轉換到低精度類型,比如從float轉換到int,那么我們有可能會損失信息。這樣的轉換叫做收縮變換(narrowing conversion)。這種情況下,我們需要顯示的聲明類型轉換,比如:

復制代碼
public class Test{    public static void main(String[] args)    {        int a;        a = (int) 1.23;  // narrowing conversion        System.out.println(a);    }}復制代碼

 

如果我們從低精度類型轉換成高精度類型,則不存在信息損失的顧慮。這樣的變換叫做寬松變換(widening conversion)。我們不需要顯示的要求類型轉換,Java可以自動進行:

復制代碼
public class Test{    public static void main(String[] args)    {         int a = 3;        double b;        b = a;  // widening conversion        System.out.println(a);    }}復制代碼

 

基本類型轉換

 

upcast與多態

在Java中,引用也可以進行類型轉換,但是有限制。

我們可以將一個衍生類引用轉換為其基類引用,這叫做向上轉換(upcast)或者寬松轉換。下面的BrokenCup類繼承自Cup類,并覆蓋了Cup類中原有的addWater()和drinkWater()方法:

復制代碼
 
public class Test{    public static void main(String[] args)    {         Cup aCup;        BrokenCup aBrokenCup = new BrokenCup();        aCup = aBrokenCup; // upcast        aCup.addWater(10); // method binding    }}class Cup {    public void addWater(int w)     {        this.water = this.water + w;    }    public void drinkWater(int w)    {        this.water = this.water - w;    }    private int water = 0;}class BrokenCup extends Cup{    public void addWater(int w)     {        System.out.println("shit, broken cup");    }    public void drinkWater(int w)    {        System.out.println("om...num..., no water inside");    }}復制代碼

程序運行結果:

shit, broken cup

 

在上面可以看到,不需要任何顯示說明,我們將衍生類引用aBrokenCup賦予給它的基類引用aCup。類型轉換將由Java自動進行。

我們隨后調用了aCup(我們聲明它為Cup類型)的addWater()方法。盡管aCup是Cup類型的引用,它實際上調用的是BrokenCup的addWater()方法!也就是說,即使我們經過upcast,將引用的類型寬松為其基類,Java依然能正確的識別對象本身的類型,并調用正確的方法。Java可以根據當前狀況,識別對象的真實類型,這叫做多態(polymorphism)。多態是面向對象的一個重要方面。

 

多態是Java的支持的一種機制,同時也是面向對象的一個重要概念。這提出了一個分類學的問題,既子類對象實際上“是”父類對象。比如一只鳥,也是一個動物;一輛汽車,也必然是一個交通工具。Java告訴我們,一個衍生類對象可以當做一個基類對象使用,而Java會正確的處理這種情況。

比如下面的繼承關系:

 

 

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

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

復制代碼
public class Test{    public static void main(String[] args)    {        Human guest = new Human();        BrokenCup hisCup  = new BrokenCup();        guest.drink(hisCup, 10);    }}class Human {    void drink(Cup aCup, int w)    {        aCup.drinkWater(w);    }}復制代碼

程序運行結果:

shit, no water inside

 

我們在Human類的drink()的定義中,要求第一個參量為Cup類型的引用。但在實際運用時(Test類),將Cup的BrokenCup衍生類對象。這實際上是將hisCup向上轉型稱為Cup類,傳遞給drink()方法。在方法中,我們調用了drinkWater()方法。Java發現這個對象實際上是BrokenCup對象,所以實際調用了BrokenCup的相應方法。

 

downcast

我們可以將一個基類引用向下轉型(downcast)成為衍生類的引用,但要求該基類引用所指向的對象,已經是所要downcast的衍生類對象。比如可以將上面的hisCup向上轉型為Cup類引用后,再向下轉型成為BrokenCup類引用。

 

Object類型

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

Object: 祖先

 

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

我將在以后深入Object類。

 

(多態的實現是依靠RTTI的支持。我將在以后深入。)

 

總結

基本類型轉換

polymorphism

downcast

Object

學習Java的同學注意了?。?! 學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Java學習交流群,群號碼:523047986  我們一起學Java!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人免费全部观看天天性色| 欧美黄色三级网站| 国产极品精品在线观看| 亚洲精品自产拍| 日韩免费在线视频| 97人人爽人人喊人人模波多| 7m精品福利视频导航| 久久久999精品| 91久久久久久国产精品| 亚洲一区二区自拍| 日韩中文字幕视频在线观看| 国产精品一区二区性色av| 97久久精品国产| 热久久99这里有精品| 欧美午夜丰满在线18影院| 日韩精品中文字幕在线观看| 8090理伦午夜在线电影| 欧美电影免费观看高清| 国产亚洲精品久久| 久久免费精品视频| 亚洲老头同性xxxxx| 成人黄色生活片| 国产欧美精品日韩精品| 第一福利永久视频精品| 欧美自拍视频在线观看| 欧美另类在线观看| 国产精品网红直播| 在线观看国产欧美| 欧美夫妻性生活xx| 最近2019年手机中文字幕| 国产视频久久久久久久| 欧美成人合集magnet| 国产精品久久久久久婷婷天堂| 伊人成人开心激情综合网| 国产亚洲在线播放| 456国产精品| 91产国在线观看动作片喷水| 国产精品久久中文| 另类视频在线观看| 欧美在线视频一区| 国产欧美日韩精品在线观看| 青青久久av北条麻妃黑人| 国产成人精品久久亚洲高清不卡| 日韩成人在线视频观看| 国产欧美精品在线| 欧美高清电影在线看| 在线日韩欧美视频| 国产精品视频999| 81精品国产乱码久久久久久| 欧美国产日韩中文字幕在线| 久久精品夜夜夜夜夜久久| 亚洲第一区第二区| 91精品视频大全| 夜夜嗨av色综合久久久综合网| 成人午夜高潮视频| 欧美成人免费全部观看天天性色| 97超级碰碰碰久久久| 欧美综合第一页| 亚洲欧美中文在线视频| 色噜噜久久综合伊人一本| 亚洲电影av在线| 26uuu亚洲国产精品| 国产亚洲精品91在线| 国产精品网站大全| 日韩成人网免费视频| 91国自产精品中文字幕亚洲| 欧美性生交大片免费| 成人免费在线视频网址| 国产精品情侣自拍| 欧美视频免费在线| 亚洲精品成人久久电影| 狠狠久久五月精品中文字幕| 欧美日韩美女在线| 国产啪精品视频网站| 国产精品欧美激情| 91chinesevideo永久地址| 久久色精品视频| 久久综合色88| 91精品国产91久久| 亚洲最大成人在线| 国产69精品99久久久久久宅男| 久久久在线观看| 久久精品视频网站| 中文字幕亚洲欧美日韩在线不卡| 亚洲视频网站在线观看| 成人福利网站在线观看11| 亚洲精品美女在线观看播放| 亚洲精品国产精品国产自| 国产精品都在这里| 亚洲欧美中文在线视频| 色小说视频一区| 福利一区视频在线观看| 久久久精品视频在线观看| 日本三级韩国三级久久| 久久大大胆人体| x99av成人免费| 视频在线观看99| 在线不卡国产精品| 亚洲精品影视在线观看| 精品久久香蕉国产线看观看gif| 精品国产一区二区三区久久久狼| 日韩中文字幕在线免费观看| 97视频在线观看免费高清完整版在线观看| 欧美一区二区三区免费观看| 欧洲亚洲免费在线| 亚洲午夜精品视频| 国产精品日韩电影| 日本sm极度另类视频| 国产精品你懂得| 国产日韩综合一区二区性色av| 一道本无吗dⅴd在线播放一区| 久久久久久久电影一区| 亚洲天堂视频在线观看| 91深夜福利视频| 亚洲自拍欧美另类| 九九视频这里只有精品| 亚洲精品国精品久久99热一| 亚洲国产精品电影在线观看| 亚洲片国产一区一级在线观看| 成人免费大片黄在线播放| 欧美中文字幕视频在线观看| 久久久久久久久久婷婷| 欧美激情网站在线观看| 亚洲精品白浆高清久久久久久| 国精产品一区一区三区有限在线| 在线观看国产成人av片| 欧美日韩久久久久| 欧美黑人一级爽快片淫片高清| 国产福利成人在线| 热久久美女精品天天吊色| 久久久久久国产免费| 久久久久中文字幕| 精品久久久久久久久久久| 国模极品一区二区三区| 欧美午夜片欧美片在线观看| 粉嫩av一区二区三区免费野| xxxxx成人.com| 人人爽久久涩噜噜噜网站| 欧美精品在线观看| 欧美国产日本在线| 欧美激情第三页| 欧美日本高清视频| 欧美国产在线电影| 日韩欧美中文字幕在线播放| 欧美日韩在线视频首页| 日本免费一区二区三区视频观看| 欧美午夜女人视频在线| 国产精品视频公开费视频| 中文字幕日韩精品在线观看| 国产91热爆ts人妖在线| 中文字幕久久久av一区| 日韩av电影在线播放| 久久影视电视剧免费网站清宫辞电视| 精品国产老师黑色丝袜高跟鞋| 免费不卡欧美自拍视频| 国产精品一区二区三区久久| 欧美一级片久久久久久久| 日韩女优人人人人射在线视频| 国产成人精品久久二区二区| 91欧美精品成人综合在线观看| 国产一区二区在线免费视频| 久久91亚洲精品中文字幕| 久国内精品在线| 91免费看国产|