黑马程序员技术交流社区

标题: 多态创建对象细节问题 [打印本页]

作者: noiary    时间: 2014-8-27 16:05
标题: 多态创建对象细节问题
  1. /**
  2. * 多态练习
  3. */
  4. class Person {

  5.                 int i = 0;
  6.                 Person() {
  7.                
  8.                         i++;
  9.                 }
  10. }

  11. class Student extends Person {

  12.          Student() {
  13.        
  14.                 i += 5;
  15.         }
  16. }       

  17. public class Demo {

  18.         public static void main(String[] args) {
  19.                
  20.                 Person p = new Student();
  21.                 p.i ++;
  22.                 System.out.println("p.i = " + p.i);
  23.                
  24.                 Person p2 = new Person();
  25.                 System.out.println("p2.i = " + p2.i);
  26.                
  27.         }
  28. }
  29. /*
  30. 运行结果为:
  31. p.i = 7
  32. p2.i = 1

  33. 我想知道当Person p = new Student(); 执行后,:

  34. 加载Student类,运行Student构造方法{  运行Person() → 构造函数{ i++;}    →  i += 5; } ,

  35. 这些动作实际上是不是仅仅把父类的成员变量int i 以及构造函数 Person() 拿过来只在Student的类中进行运算而非跑到Person类中进行?

  36. 不然为什么p2.i的打印结果是1呢?
  37. */
复制代码

作者: 付剑翊    时间: 2014-8-27 17:28
你的问题涉及到函数执行的原理,构造函数也是函数,函数执行的时候会将函数压栈,执行结束后弹栈,都是在栈区进行,楼主的理解好像是去堆区里面对象内的空间去执行函数的感觉。。。




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