论坛首页 Java企业应用论坛

JAVA里多态的理解

浏览 18902 次
精华帖 (3) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (8)
作者 正文
   发表时间:2008-10-26  
ghio1314520 写道

草 一句话不就解决了 多态 就是 重写和重载!

谢谢你的回复啊!我也知道要一句话解决的问题,但是自己就是看了JAVA编程思想不怎么理解的情况下,自己"强类比转化"的方式硬是怎么理解了。o(∩_∩)o...哈哈,高手以后不吝指教啊!
0 请登录后投票
   发表时间:2008-10-26  
多态这个东西要慢慢理解,感觉有的时候还是要自己写一些东西来理解会容易一些!
0 请登录后投票
   发表时间:2008-10-27  
不知道是我没看明白 还是。。。。
Sonx father2sonx = (Sonx)father;
  father2son .视察();

我觉得这里会报个 类塑型异常吧
哪有父类强制转换成子类的?
0 请登录后投票
   发表时间:2008-10-27  
有点乱,不喜欢这种方式表述
0 请登录后投票
   发表时间:2008-10-27  
比较形象.
没做过系统重构的人是很难理解多态的作用的
0 请登录后投票
   发表时间:2008-10-27  
很形象 有活力
0 请登录后投票
   发表时间:2008-10-27  
形象,明白了
0 请登录后投票
   发表时间:2008-10-27  
嗯,嗯,好玩儿
0 请登录后投票
   发表时间:2008-10-27  
changqingonly 写道
    今天有开始对多态的理解加深了,基础不好的话看别人的程序很麻烦了,要不断地测试,测试……然后想想为什么,为什么……等过了一两年再看原来的基础代码的时候友开发犯迷糊了,又开始犯迷糊,然后测试测试……回忆一下为什么这样那样……
    Father{
     视察(){
         System.out.println("大家好好工作啊,你们辛苦了!");
         System.out.println("基层的每个官员给我贿赂300块大洋,我保你们平安");
     }
   }
    现在我们创建对象
          Father father = new Father();
         father.视察();//工作做完了,并且还捞了不少钱
   现在老爹不想干了,想退休了,儿子就可以继任啦,但是以前的基层官员可没退休,这群基层的只在乎你是不是有这个头衔;
   根据中国封建的世袭制,孩子是有这个头衔的。为了让儿子有这个头衔,我们创建对象的时候就采用了继承机制
   Son extends Father{}
   Son son = new Son();
   son.视察();//(用老子的方法)工作做完了,又捞了不少钱
  孩子们都继承父亲。这样儿子就有了老爹的职能了。但是儿子每次捞的钱数和老爹每次的一样。孩子心想啊,我要比老爹捞的多一点,不然人家骂我无能了。所以现在孩子都不用老爹的工作方式了,都改成自己的
   Sonx extends Father{
    视察(){
         System.out.println("大家好好工作啊,你们辛苦了!");
         System.out.println("以后基层的每个官员给我贿赂600块大洋,我保你们平安");
     }
    玩乐(){
         System.out.println("今天去了3家青楼!");
    }
  }
  Sonx sonx = new Sonx();
  sonx.视察();//(用自己的方法)工作做完了,又捞了不少钱
  孩子们都覆盖了老爹的工作方式了,这样就可以打捞一笔了。
  继承的方式说完了,现在开始看看多态的方式吧。
  现在孩子要去觐见皇帝老儿了,皇帝老儿以前只给孩子他爹授勋过而已,也只在乎你这个小屁孩是不是我那时候给授勋的那个大臣的孩子。所以孩子们就不得不“转型”!既然皇帝老儿只认身份不认人,那我就“上转型”成我老爹不就行了!于是孩子开始转型了
  Father son2father = son;
  这样皇帝老儿也知道了这个小毛孩是谁了,也给予这个小屁孩觐见的功能了。这时候皇帝老儿问孩子:“你每次去视察的时候每个官员收多少钱啊?”,不贪的(没有重写视察方法的那个孩子)son就回答说:“300块大洋”;贪的那个孩子(重写了视察方法的那个孩子)回答:“我比较上进,要求每个收600块大洋”。皇帝老儿点点头就让这群小屁孩回去了。
  现在,老子觉得在家里呆着无聊,还想出去视察工作。这可不好办了,现在人家认的是儿子而已,人家不认我了,我都已经把权利都交给孩子了,这可怎么办呢?我可以也转转型呀?   

  Sonx father2sonx = (Sonx)father;



上面这一句是不对的!如果这个父类的引用不是由子类的构造器初始化的,你不能强制的把父类强制转换为子类。这是一个最基本的原则,子类能够被作为父类使用,但是父类不能作为子类使用,这个原则应该不但停留在认识的层次,在代码里面,这样的强制类型转换也是应该尽量被禁止的,如果一定要进行强制的类型,最好进行instanceof的检查。

引用

  father2son .视察();
  老爹可以出去贪污受贿了?你觉得人可以返老还童么?你是上帝么?上帝是你么?
     father2sonx.视察();
     father2sonx.玩乐();
看到这里你觉得这个老子贪心么?很贪心是吧!!!既然你觉得这样的老子很贪心,为什么让他这么干呢?我看不下去,相信你也看不下去。外国人更是看不下去了:“娘希匹,不准你转,你以为上帝是你自己的啊?要转我就给你抛异常(java.lang.ClassCastException)”


其实你在这边说的并不是多态的概念,并没有触及到多态的动态后绑定的本质。
0 请登录后投票
   发表时间:2008-10-27  
多态怎么就成了:“就是重载和重写”???
那我的类“实现”一个接口,可不可以实现多态?

你这把父类往子类上强制转型,既不多态,也有错误。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics