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

首頁 > 學院 > 開發設計 > 正文

我看多態——多態的學習筆記

2019-11-18 13:09:07
字體:
來源:轉載
供稿:網友

  發現好多初學的朋友對多態部分總是比較模糊,小弟今天在看朋友的學習筆記的時候也發現這個問題,所以借我朋友筆記上的問題,發表一下自己的看法,先假設有繼續關系如下的類: 代碼:
  
  Animal
  
  Mammal
  
  ---------------------------------------------------------------
  
  Dog Cat Raccoon SwampThing
  (implements (implements
  Washer) Washer)
  ? interface Washer {}
  ? class Animal {}
  ? class Mammal extends Animal {}
  ? class Dog extends Mammal {}
  ? class Cat extends Mammal implements Washer {}
  ? class Raccoon extends Mammal implements Washer {}
  ? class SwampThing extends Mammal {}
  
  下面的為對這幾個類的應用和我朋友的筆記:
  
  public class Test14 {
  public static void main(String[] a) {
  //----------------------------------
  Dog rover,fido;
  Animal anim;
  rover =new Dog();
  anim=rover; //理解成Animal anim = new Dog();
  fido =(Dog)anim; //這段話能夠通過編譯和運行?。。。?!
  //fido =anim;不能通過編譯
  //----------------------------------
  Washer wawa=new Cat();
  SwampThing pogo;
  pogo=(SwampThing)wawa;
  //這句話能夠通過編譯,但不能運行
  //兩個毫不相干的類對象,居然能夠通過編譯?
  //經另外測試,任意兩個不相干的類對象cast是會出現編譯錯誤的,
  //所以,上面的類可能是繼續了同一個類的緣故?
  
  我的解釋:
  首先,我們知道,超類類型的變量可以引用一個子類類型的對象,即
  代碼:
  Animal anim = new Dog();
  這樣是完全可以的,但是要注重的是編譯器只檢查且承認定義時候的類型,所以這樣定義并賦值的anim變量不能調用Dog類中特有的實例字段和方法,這就是我們通常所說的隱藏,假如我們仍然要用到這些被隱藏的東西怎么辦呢,那就是后面我們看到的筆者認為費解的那句:
  代碼:
  fido =(Dog)anim;
  其實這樣只是恢復了被隱藏的功能,并不是把超類對象賦給子類變量,當然,編譯器并不管最終這個造型轉換能否成功,編譯器現在只知道你在把一個Dog型的對象賦值給一個Dog型的變量,這當然沒有問題,同樣,后面的這樣3句
  代碼:
  Washer wawa=new Cat();
  SwampThing pogo;
  pogo=(SwampThing)wawa;
  
  也很好理解,編譯器只知道你在試圖把一個SwampThing型的對象賦值給一個SwampThing型的變量,這當然沒問題,注重對象wawa原來是什么類型編譯器并不管(這句話并不全面,具體見下面),它只知道不管什么類型已經強制轉換成了SwampThing型,至于這種轉換會否成功則會在運行時判定,假如不能成功轉換當然會拋出異常,這就是為什么總說造型前請用instanceof判定對象本身是否屬于要轉換的類!
  讓我們探討的再深一點:
  注重筆者上邊最后注釋的話是不對的,
  Cat類與SwampThing類不是毫不相干的,它們都實現了Washer接口,注重變量wawa被定義的類型并不是Cat類型,而是Washer接口類型,所以
  代碼:
  pogo=(SwampThing)wawa;
  
  這句話才有可能成功,假如變量wawa被定義為Cat類型,則上面的造型絕對不可能成功,即編譯也無法通過!由此我們知道,編譯器也會為造型做出判定,不過編譯器只會判定被造型的對象有沒有可能被造型成功,就象上面的代碼,wawa定義的時候是Washer類型,任何實現了這個接口的類的對象都可以被wawa引用,而SwampThing類也實現了這個接口,所以當編譯器執行到上面的代碼時,編譯器只通過對wawa的定義檢查,認為wawa有可能指向SwampThing類型的對象,這個造型有可能成功,所以可以被編譯成功!
  還可以再深一點討論:
  上面例子中筆者注釋了這么一句話:
  //fido =anim;不能通過編譯
  通過閱讀之前的代碼我們知道變量anim指向的實際對象和fido的定義類型是一致的,都是Dog,但是不能編譯,這是因為編譯器只檢查anim的定義,發現是Dog的超類,所以我們必須要先類型轉換,但是假設可以通過某種方法強制通過編譯,那么這句話運行時反而沒有問題因為實際類型是匹配的,這種情況可以說正好與上面討論的能通過編譯但是運行出錯的情況相反!
  總結:正是java中編譯器只檢查定義類型,運行時檢查實際類型的雙重檢查方式造成了面向對象中多態這種即規范同時又非常有靈活性的機制

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97在线免费观看视频| 一区二区av在线| 精品国产乱码久久久久久虫虫漫画| 午夜精品一区二区三区视频免费看| 欧美性猛交xxxx偷拍洗澡| 国产成人精品综合| 国产精品一区二区久久久久| 亚洲欧美国产另类| 日韩成人在线观看| 欧美国产日韩视频| 亚洲国产精品成人av| 精品久久久久久久久中文字幕| 亚洲国产成人久久综合| 日韩欧美成人免费视频| 精品国产拍在线观看| 最近2019好看的中文字幕免费| 国产亚洲欧美日韩美女| 欧美成人精品激情在线观看| 精品福利一区二区| 欧美成人合集magnet| 亚洲成avwww人| 亚洲精品一区二区三区不| 亚洲欧美视频在线| 992tv成人免费影院| 国产精品九九九| 久久天天躁狠狠躁夜夜躁2014| 国产成人福利夜色影视| 久久精品国产96久久久香蕉| 4438全国亚洲精品在线观看视频| 亚洲九九九在线观看| 色综合久久久888| 日本中文字幕不卡免费| 日韩欧美在线播放| 欧美午夜宅男影院在线观看| 最近2019免费中文字幕视频三| 成人h视频在线观看播放| 精品久久中文字幕| 国产精品永久免费观看| 国产精品久久久久久久久久久新郎| 久久久久久久久久亚洲| 亚洲最大av在线| 欧美日韩ab片| 久久久黄色av| 国产午夜精品免费一区二区三区| 北条麻妃一区二区在线观看| 亚洲综合第一页| 超碰精品一区二区三区乱码| 国产精品男人爽免费视频1| 韩国国内大量揄拍精品视频| 日韩视频欧美视频| 欧美俄罗斯乱妇| 亚洲女人被黑人巨大进入| 成人网页在线免费观看| 亚洲欧美日韩国产精品| 国产主播喷水一区二区| 久久久久久久999精品视频| 国产做受高潮69| 欧美在线视频观看| 久久在线视频在线| www国产精品视频| 国产原创欧美精品| 日韩午夜在线视频| 国产免费一区视频观看免费| 久久久国产一区| 欧美电影电视剧在线观看| 狠狠躁18三区二区一区| 日韩视频免费中文字幕| 欧美做爰性生交视频| 欧美老肥婆性猛交视频| 色婷婷综合成人| 亚洲精品日韩久久久| 成人激情黄色网| 欧美日韩国产999| 国产日产欧美a一级在线| 日韩美女视频中文字幕| 91久久中文字幕| 久久久精品999| 亚洲丝袜av一区| 91av视频导航| 亚洲一区二区在线播放| 97国产一区二区精品久久呦| 国产精品一区二区三区成人| 精品日韩视频在线观看| 亚洲伊人成综合成人网| 亚洲日本中文字幕| 久久在线免费视频| 韩国v欧美v日本v亚洲| 欧美性猛交xxxx乱大交极品| 日韩欧美中文字幕在线观看| 6080yy精品一区二区三区| 亚洲激情成人网| 久久久影视精品| 亚洲精品福利在线| 国产精品一区二区女厕厕| 亚洲人成网在线播放| 欧美精品情趣视频| 日本一区二三区好的精华液| 91精品在线播放| 国产一区二区三区欧美| 欧美午夜片在线免费观看| 美日韩丰满少妇在线观看| 日韩久久免费电影| 超碰日本道色综合久久综合| 欧美午夜激情视频| 不卡中文字幕av| 精品久久在线播放| 日韩av最新在线| 精品国产乱码久久久久酒店| 中文字幕精品www乱入免费视频| 4438全国亚洲精品在线观看视频| 国产精品久久久久久网站| 国产伦精品一区二区三区精品视频| 成人精品视频在线| 亚洲欧洲一区二区三区久久| 国内精品久久久久久久久| 亚洲精品suv精品一区二区| 日韩成人免费视频| 国产精品一区二区性色av| 欧美成人一区在线| 在线观看久久久久久| 国产精品都在这里| 欧美又大粗又爽又黄大片视频| 色综久久综合桃花网| 色偷偷亚洲男人天堂| 欧美日韩在线视频观看| 中文字幕久久亚洲| 国产精品色午夜在线观看| 日韩精品日韩在线观看| 97香蕉久久夜色精品国产| 欧美日本高清视频| 日韩成人xxxx| 2018日韩中文字幕| 亚洲第一网站男人都懂| 久久69精品久久久久久国产越南| 亚洲在线www| 国产剧情久久久久久| 欧美大尺度在线观看| 亚洲精品一区中文字幕乱码| 亚洲码在线观看| 免费成人高清视频| 国内外成人免费激情在线视频网站| 国产精品高清在线观看| 中文字幕亚洲自拍| 亚洲人成网站在线播| 日韩在线视频观看正片免费网站| 日韩在线观看免费高清完整版| 欧美黄色片免费观看| 色视频www在线播放国产成人| 欧美成人免费观看| 欧美片一区二区三区| 最近免费中文字幕视频2019| 在线看欧美日韩| 一本色道久久88精品综合| 精品久久久一区二区| 日韩欧美在线网址| 懂色av一区二区三区| 亚洲精品第一国产综合精品| 国产色婷婷国产综合在线理论片a| 国产小视频国产精品| 亚洲免费中文字幕| 日韩高清欧美高清| 欧美日韩性视频在线| 疯狂欧美牲乱大交777| 亚洲国产精久久久久久|