秒速飞艇app:

北京 切换校区

全国24小时免费热线

400-009-1906

动物王国的面向对象

时间:2019-01-08   来源:尚学堂   阅读:346

  动物世界最近出现了两个动物,不知道是从哪儿new出来的。

  当他们在大街上走的时候,我们只能看到两团迷雾,看不出来里边具体是什么动物,幸好迷雾上方一直浮着一个标签:Animal。

  让我们知道他们应该是动物,不是怪物。

  有一天,这两个家伙见面了,我们暂时称呼他们A1和A2吧。

  A1:哥们,咱俩这么像,你是谁啊

  A2:我一直想搞清楚我到底是谁,我被new出来的时候只知道我是个Animal。

  A1:我也是,我们一起研究下,要不先看看Animal的定义了啥吧

  A2:我看看,有个intage;变量,我访问下试试,System.out.println(A2.age),返回4,看来我4岁了

  A1:这有啥用,这个Animal不是还有个函数吗?能够获得最喜欢的食物,不过它返回“不知道”,这实在是太搞笑了。

  publicStringgetFavoriteFood(){

  return"不知道";

  }

  A2:恩,确实搞笑,要不我调用一下试试?A2.getFavoriteFood(),它竟然返回了“鱼”!,这是怎么回事?也许我是一只猫?

  A1:不可能吧,我也试试,A1.getFavoriteFood(),天哪,它返回了“骨头”!难道我是狗吗?

 ?。ˋ1,A2这两个家伙不知道,其实这里是“多态”起了作用)

  A2:要不我试试转型成猫?慢着,我先判断一下(A2instanceofCat),是true,好了,转型!Catcat=(Cat)A2

  (神奇的事情发生了,A2周围的迷雾消失了,A2真的是一只猫!)

  A1:原来如此,我也来转型,Dogdog=(Dog)A1,果然我是一只狗啊。

 ?。礁鱿至嗽偷募一锓浅8咝耍?/span>

  Cat:Dog兄,我想起来了,他们的确是通过newCat()把我new出来的,但是给我赋给了Animaila2=newCat(),不知道他们为啥这么干?

  Dog:Cat弟,别管这么多了,走了半天,肚子饿了,我们找点东西吃吧。

  Cat:你自己不就有个eat方法吗?publicStringeat(Foodd);

  Dog:是啊,可是Food从那里来,得餐馆才能提供啊

 ?。礁黾一锿白?,找餐馆)

  Cat:看!前面有一家,不过上面写着只允许兔子进入

  publicvoidenterGate(Rabbitr);

  Dog:让我试试能不能进去enterGate(dog),啊,编译错误

  Cat:你不会强制转型吗?看我的,Rabbitr=(Rabbit)cat;还是编译错误。

 ?。ㄆ涫邓遣恢?,Java是个强类型语言,类型不同,是无法强制转型的)

  Dog:看,那里有个团队游客入口,我们混进去吧:

  publicvoidenterGat(List<Rabbit>rabbits){

  Iterator<Rabbit>iter=rabbits.iterator();

  while(iter.hasNext()){

  Rabbitr=iter.next();

  r.eat(food);

  }

  }

  Cat:好

  Listlist=newArrayList();

  list.add(cat);

  list.add(dog);

  enterGate(list);

  Dog:没有编译错误,竟然混进来了,开吃吧

  Cat:怎么回事?运行时还是出来异常啊。。。

  java.lang.ClassCastException:CatcannotbecasttoRabbit

  Dog:走吧,换一家,唉,这家只允许老虎入内,这破程序是谁写的???

  CAT:看看前面那家,多大啊,几乎所有的动物都能进去啊,你看哈巴狗和波斯猫正在往里边跑呐。

  Dog:恩,它的门上写着动物都可以入内,我们进去试试吧

  publicvoidenterGate(Animala)

 ?。―og和Cat都顺利的进了门,因为他们都是“Animal”,但是进去后就发现,所有的动物都是一团迷雾,再也认不出谁是谁了,Dog和Cat又变成了A1和A2)

  A2:Dog兄,你还在吗?(没有回音)

  A2:恩,我是谁???

  服务员:别琢磨了,你是第一次来吧,新人都有这个毛病,老是爱琢磨自己的具体类。请提供你最喜欢的食物?

  A2:"鱼"(调用getFavoriteFood()方法)

  服务员:"稍等,鱼马上就来"

  A2:“你也不问问我到底是谁吗?”

  服务员:我不管你是谁,只要你是Animal就行,你不是有个eat方法吗?我们这个餐馆,使用的是“面向接口编程,而不是面向具体类编程”,要不然,每个动物都判断一下,我们不亏死了。

  A2:奥,我有点明白那帮家伙把我new出来以后,只是给我贴上Animal标签的原因了。

相关资讯

  • 北京校区
  • 山西校区
  • 郑州校区
  • 武汉校区
  • 四川校区
  • 长沙校区
  • 深圳校区
  • 上海校区
  • 广州校区
  • 保定招生办

北京海淀区校区(总部):北京市海淀区西三旗街道建材城西路中腾建华商务大厦东侧二层尚学堂
北京京南校区:北京亦庄经济开发区科创十四街6号院1号楼 赛蒂国际工业园
咨询电话:400-009-1906 / 010-56233821
面授课程: JavaEE培训、 大数据就业班培训、 大数据云计算周末班培训、 零基础大数据连读班培训、 大数据云计算高手班培训、 人工智能周末班培训、人工智能+Python全栈培训、 H5+PHP全栈工程师培训

山西学区地址:山西省晋中市榆次区大学城大学生活广场万科商业A1座702

郑州学区地址:河南电子商务产业园6号楼4层407
咨询电话:0371-55177956

武汉学区地址:湖北省武汉市江夏区江夏大道26号 宏信悦谷创业园4楼
咨询电话:027-87989193

四川学区地址:成都市高新区锦晖西一街99号布鲁明顿大厦2栋1003室
咨询电话:028-65176856 / 13880900114

网址://www.cssxt.com/
咨询电话:0731-83072091

深圳校区地址:深圳市宝安区航城街道航城大道航城创新创业园A4栋210(固戍地铁站C出口)
咨询电话:0755-23061965 / 18898413781

上海尚学堂松江校区地址:上海市松江区荣乐东路2369弄45号绿地伯顿大厦2层
咨询电话:021-67690939

广州校区地址:广州市天河区元岗横路31号慧通产业广场B区B1栋6楼尚学堂(地铁3号线或6号线到“天河客运站”D出口,右拐直走约800米)
咨询电话:020-2989 6995

保定招生办公室

地址:河北省保定市竞秀区朝阳南大街777号鸿悦国际1101室

电话:15132423123

Copyright 2006-2019 北京尚学堂科技有限公司  京ICP备13018289号-19  京公网安备11010802015183  
媒体联系:18610174079 闫老师  

Java基础班,免费试学三周

799| 715| 600| 811| 163| 869| 428| 119| 700| 848|