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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© noiary 高级黑马   /  2014-8-27 16:05  /  765 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. */
复制代码

1 个回复

倒序浏览
付剑翊 来自手机 中级黑马 2014-8-27 17:28:03
沙发
你的问题涉及到函数执行的原理,构造函数也是函数,函数执行的时候会将函数压栈,执行结束后弹栈,都是在栈区进行,楼主的理解好像是去堆区里面对象内的空间去执行函数的感觉。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马