A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨博 中级黑马   /  2013-3-13 21:36  /  1779 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨博 于 2013-3-15 20:24 编辑
  1. /*
  2. 关于运算操作程序
  3. */
  4. class Test8
  5. {
  6. public static void main(String[] args)
  7. {
  8. int a=4;
  9. int b=1;

  10. Operation op=OpeationFactory.getOperation('-');

  11. int result=op.oper(a,b); 。

  12. System.out.println(result);
  13. }
  14. }


  15. class OpeationFactory
  16. {
  17. public static Operation getOperation(char c){
  18. Operation op=null;
  19. switch(c){
  20. case '+': op=new Add();break;         <FONT color=red>  //这块的作用,为什么是Operation类,有什么用,不能设置为calss Add吗?</FONT>
  21. case '-': op=new Sub();break;
  22. case '*': op=new Mul();break;
  23. case '/': op=new Div();break;
  24. case '%': op=new Mod();break;
  25. }

  26. return op;
  27. }
  28. }



  29. abstract class Operation
  30. {
  31. abstract int oper(int a,int b);
  32. }

  33. class Mod extends Operation
  34. {
  35. int oper(int a,int b){
  36. return a%b;
  37. }
  38. }

  39. class Add extends Operation
  40. {
  41. int oper(int a,int b){
  42. return a+b;
  43. }
  44. }


  45. class Sub extends Operation
  46. {
  47. int oper(int a,int b){
  48. return a-b;
  49. }
  50. }


  51. class Mul extends Operation
  52. {
  53. int oper(int a,int b){
  54. return a*b;
  55. }
  56. }


  57. class Div extends Operation
  58. {
  59. int oper(int a,int b){
  60. return a/b;
  61. }
  62. }
复制代码
问题见代码红色部分,这块说用到父类引用指向了子类对象,具体在代码中是怎么做的,求指导

点评

如果问题已经解决了,请将分类改为已解决,谢谢  发表于 2013-3-15 08:43

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

3 个回复

倒序浏览
这个其实主要理解引用类型和基本类型一样,都是有高级和低级,父类比子类就高,你的代码23行,定义了一个父类的引用,并赋予初值为null,后面的switich语句中选择结果是new Add()这个是子类Add的对象,所以就把子类的对象赋值给了父类的引用,这就是多态的最常见的表现形式,其实在赋值过程隐含了低等级的引用自动转向高级。
这是我自己的理解,希望对楼主有帮助!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
烟磊磊 发表于 2013-3-13 21:42
这个其实主要理解引用类型和基本类型一样,都是有高级和低级,父类比子类就高,你的代码23行,定义了一个父 ...

见解很精辟啊,茅塞顿开,太感谢你了
回复 使用道具 举报
你这是说的是对象的上转型对象吧,
我们经常说老虎是哺乳动物,狗屎哺乳动物,如果说哺乳动物是老虎类的父类,这样说当然正确,但是 当说老虎是哺乳动物时,老虎将失掉老虎所有的属性和功能,下面给你说一下对象的上转型对象
假设A类是B类的父类,当用子类创建一个对象,并把这个对象的引用放到父类的对象中时,如A a=new B();
这时称对象a是对象b的上转型对象
其特点
1,上转型对象不能操作子类新增的成员变量(失掉这部分属性)和新增的方法(失掉这部分功能),
2,上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方法或子类重写的方法,
因此,如果子类重写了父类的某个方法后,当对象的上转型对象调用这个方法时一定是调用了子类重写的方法。
可以将对象的上转型对象再强制转换到一个子类对象,这时,该资料对象又具备了子类所有的属性和功能,
切记:
不可以将父类创建的对象的引用赋值个子类声明的对象(不能说哺乳动物是老虎)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马