iteye_19697
2008-12-08 17:55
浏览 158
已采纳

关于子类构造器中调用父类构造器的问题

public class Person{

    private String name;

    public Person(String name){

       this.name = name;

    }

}

 

public class Employee extends Person{

    public Employee(String name){

       super(name);

    }

}

 

public class EmployeeTest{

    public static void main(String[] args){

       Employee e = new Employee("briup");

    }

}

在这里Employee类继承Person类,

在EmployeeTest类的main方法中,new一个Employee对象,

那么Employee类中构造器中的super(name)操作有没有创建Person对象,如果没有创建,那么在Person类中的

name变量在内存中以什么形式存放?

谢谢!

 


问题补充:
我重点想问的是name属性在内存中是如何存放的,谢谢
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • iteye_19016 2008-12-09 13:14
    已采纳

    name 属性!是属于Person类!
    在堆中Person区域的 分配的内存

    点赞 打赏 评论
  • iteye_19016 2008-12-08 19:35

    你要记住 java是面向对象的语言。
    java的创始者灵感来自于 现实生活。

    你的那段程序代码,意思是 在构造子类前, 先把父类构造。然后再是子类。
    因为先有老爸才有你。

    同样的 java 语法规范里。 一个类只能继承一个父类。
    同理 一个儿子的DNA不可能 来自于 2个不同的父亲。

    你结合自然规律 去思考java的语法用以 规范就能很清除的理解深刻了

    点赞 打赏 评论
  • maming2000 2008-12-09 00:26

    Employee 是Person的子类型,所以严格来讲,是创建了Person类型的对象了,并且可以安全上塑造型(Person)employee。
    name是继承自Person的,就像楼上说的不能说父亲有了DNA,儿子就不需要有自己的DNA了,儿子也有,它不是父亲的,如果儿子已经出生了(父亲和儿子这俩对象已经创建了),他俩的值不能互相影响的,不能说改了父亲的DNA,已出生的儿子的DNA也改了。
    但是是和父亲一类的,如果儿子还没出生时改变父亲的DNA(改变类的定义),等儿子出生的时候自然拥有新的一套DNA了。
    关键是你要区分类、对象的区别,再有弄清楚继承的意思。

    点赞 打赏 评论

相关推荐 更多相似问题