黑马程序员技术交流社区

标题: 子类调用父类方法问题 [打印本页]

作者: 路文龙    时间: 2015-3-4 21:58
标题: 子类调用父类方法问题
本帖最后由 路文龙 于 2015-3-8 17:09 编辑
  1. class A {
  2.     void fun1() {
  3.               System.out.println(fun2());
  4.         }
  5.         int fun2() {
  6.                 return 123;
  7.         }
  8. }
  9. class B extends A {
  10.         int fun2() {
  11.                  return 456;
  12.          }
  13. }
  14. public class Test6 {
  15.        public static void main(String args[]) {
  16.            B b = new B();
  17.            b.fun1();
  18.            A a = b;
  19.            a.fun1();
  20.    }
  21. }
复制代码
为什么输出结果是
456
456
请讲一下堆内存中方法区的调用过程,谢谢啦。

作者: sofeel    时间: 2015-3-4 22:14
A a = b;
这一句:意思是把b指向的对象new B()的引用地址,赋给了a,这样a便指向了对象new B()
这就是多态的一般性应用。父类的应用,可以指向子类的对象。
作者: 路文龙    时间: 2015-3-4 22:37
sofeel 发表于 2015-3-4 22:14
A a = b;
这一句:意思是把b指向的对象new B()的引用地址,赋给了a,这样a便指向了对象new B()
这就是多态 ...

能讲一下堆内存里面怎么个调用过程么。
作者: sofeel    时间: 2015-3-4 22:39
路文龙 发表于 2015-3-4 22:37
能讲一下堆内存里面怎么个调用过程么。

等等我画个图

作者: sofeel    时间: 2015-3-4 22:59
画图是体力活啊

多态.gif (20.78 KB, 下载次数: 10)

多态.gif

作者: yjsf216    时间: 2015-3-5 00:32
我也学习了,:)
作者: huangchunwei    时间: 2015-3-5 08:09
学习学习。。。
作者: 执念    时间: 2015-3-5 08:29
还是看不懂!谁解释下这里
B b=new B();
b.fun1();   //这里的fun1怎么来的额??好像没有用到super 调用父类方法吧?这么能直接调用的?

作者: 路文龙    时间: 2015-3-5 10:00
执念 发表于 2015-3-5 08:29
还是看不懂!谁解释下这里
B b=new B();
b.fun1();   //这里的fun1怎么来的额??好像没有用到super 调用父 ...

我按我的理解画的

捕获.PNG (111.62 KB, 下载次数: 7)

我自己的理解不知道对不对。

我自己的理解不知道对不对。





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