黑马程序员技术交流社区

标题: 基础测试中的多态问题 [打印本页]

作者: syz1993    时间: 2014-12-30 12:27
标题: 基础测试中的多态问题
本帖最后由 syz1993 于 2015-1-1 22:32 编辑
  1. class A {

  2.     void fun1() {

  3.               System.out.println(fun2());

  4.         }

  5.         int fun2() {

  6.                 return 123;

  7.         }

  8. }

  9. public class B extends A {

  10.         int fun2() {

  11.                  return 456;

  12.          }

  13.       public static void main(String args[]) {

  14.                 B b = new B();

  15.                 b.fun1();

  16.                 A a = b;     //是多态吧

  17.                 a.fun1();

  18.         }

  19. }
复制代码
(运行结果都是456,为什么多态时,调用方法调用子类的,而不调用父类的)
这个问题我解决了,因为子类已经覆写了父类的方法,所以在调用方法时,一定调用的是子类覆写了的方法
怎么很多人都评论这里没多态啊。
这是一个基础测试题,分析结果,说出运用的原理。


作者: lixing123456    时间: 2014-12-30 12:41
....................................
作者: 寻觅    时间: 2014-12-31 09:49
这里没有涉及到多态呀,A类中有两个方法,B类继承了A类,B类就有了A类的这两个方法,但是B类重写了fun2()方法,这个时候B类仍然有一个fun1()方法,和A类的一样,因为是继承过来的。主函数当中的b.fun1();b对象调用的是子类的方法,不是父类的,代码中的第31行,是把b的引用给了一个A类类型的变量a,a和b的在栈内存中的物理地址不同,但是引用是相同的,就是指向的对象是相同的,都是指向27行new的那个new B();所以33行的a.fun1()其实和29行的b.fun1()输出的结果一样,都是456
作者: 红楼    时间: 2014-12-31 18:22
学了后面忘了前面
作者: x277402301t    时间: 2014-12-31 19:19
哥们,你都没覆写父类的方法,只是继承了父类!不算多态!
作者: syz1993    时间: 2015-1-1 21:04
寻觅 发表于 2014-12-31 09:49
这里没有涉及到多态呀,A类中有两个方法,B类继承了A类,B类就有了A类的这两个方法,但是B类重写了fun2()方 ...

A a=b;不是多态?
作者: 446111220    时间: 2015-1-1 21:29
你这代码写的   我是真心看的艰难   学习下吧   我还是什么都不懂的
作者: syz1993    时间: 2015-1-1 21:35
446111220 发表于 2015-1-1 21:29
你这代码写的   我是真心看的艰难   学习下吧   我还是什么都不懂的

这是一道基础测试题,分析结果,写出原理
作者: 寻觅    时间: 2015-1-1 21:51
syz1993 发表于 2015-1-1 21:04
A a=b;不是多态?

不好意思,我有点看走眼了!你这个是多态,你过我给你的回复其他的写的都是对的!不好意思!
作者: hmyf150122    时间: 2015-1-1 22:01

      B b = new B();

         b.fun1();//子类继承父类的fun1()并且覆盖了父类的fun2(),fun1()调用fun2()时是调用自己的方法

                A a = b;//父类引用指向子类对象时,父类访问自己的方法fun1(),fun1()调用fun2()时可以调用子类的方法

                a.fun1();

作者: 18334705181    时间: 2015-1-1 22:08
你的这个代码并没有涉及到多态的应用,多态的格式是父父 new子,你这只是建立了子类的对象,并不是多态
作者: syz1993    时间: 2015-1-1 22:17
18334705181 发表于 2015-1-1 22:08
你的这个代码并没有涉及到多态的应用,多态的格式是父父 new子,你这只是建立了子类的对象,并不是多态 ...

再往下看,A a=b;是多态把,父类引用 指向了子类的对象




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2