黑马程序员技术交流社区

标题: 一段困惑的代码,求解释 [打印本页]

作者: 张昊镭    时间: 2012-4-8 10:44
标题: 一段困惑的代码,求解释
class Person
{
    String name;
    Person(String name)
    {
        this.name=name;
    }
    public String getName()
    {
        return name;
    }
}
class Student extends Person
{
    Student(String name)
    {
        super(name);
    }
}
class Demo
{
    public static void main(String[] agrs)
    {
        System.out.println(new Student("张三").getName());
    }
}

我的问题是:
执行super(name)的时候,会执行this.name=name;那么"张三"这时是赋值给Student对象了还是赋值给Person对象了.可能我说错了,如果能讲解下"张三"是怎么传递的,不甚感激.
作者: 宋蕈    时间: 2012-4-8 10:49
在执行super(name) 的时候, 系统调用了 Person类的构造函数。 将name 赋值给了 Person类的成员变量
name,然后当new出来的Student对象在调用getName() 方法时,实际上系统又是调用了Person类的getName()
方法,则此时正好就是将Person类的 name成员变量 进行了输出。
作者: newlaw2013    时间: 2012-4-8 10:53
new Student("张三")的时候,调用Student的构造方法,传入了张三,Student的构造方法的第一句话是super(name),则调用父类的构造方法继续传递张三,此时,张三是传递给了父类的name字段。
作者: 黑马-刘昌文    时间: 2012-4-8 10:57
赋值给Student对象了,当执行new student("张三")时,它会调用父类带参数的构造方法!
作者: newlaw2013    时间: 2012-4-8 11:01
补充一下,关于疑问中的知识点,可以看毕老师的java基础视频day07 的第6个:
"子父类中构造函数的特点-子类实例化过程“
作者: 张昊镭    时间: 2012-4-8 11:03
宋蕈 发表于 2012-4-8 10:49
在执行super(name) 的时候, 系统调用了 Person类的构造函数。 将name 赋值给了 Person类的成员变量
name, ...

非常感谢,你说传给Person的成员变量我就明白了,后面还有些问题也就明白了.
作者: 郑苑东    时间: 2012-4-8 11:04
谁的实例对象就会调用谁的方法,子类没有才在父类中找。Student类没有get方法。所以用的是父类的。方法和变量。。。
作者: 江远云    时间: 2012-4-8 12:45
本帖最后由 江远云 于 2012-4-8 12:47 编辑

//我的问题是:
//执行super(name)的时候,会执行this.name=name;那么"张三"这时是赋值给Student对象了还是赋值给Person对象了.可能我说错了,如果能讲解下"张三"是怎么传递的,不甚感激.
张三是赋值给Person对象
传递过程是执行到super(name)的时候去父类参数为name的构造函数初始化,并把张三赋值给了Person对象中的name
作者: pray    时间: 2014-4-26 05:20
看完楼主的帖子,我的心情竟是久久不能平复,正如老子所云:大音希声,大象希形。我现在终于明白我缺乏的是什么了,从楼主那对真理的执着追求和楼主那种对理想的艰苦实践的深邃的眼神中。面对楼主的帖子,我震惊得几乎不能动弹了,楼主舍我其谁的个人栖止,竟使我忍不住一次次的翻开楼主的帖子,每看一次楼主的样子,赞赏之情就激长数分,我总在想,是否有神灵活在他灵秀的外表下,以至能使人三月不知肉味,使人有余音穿梁,三日不绝的感受。楼主,你长得实在是太好了。我唯一能做的,就只有把这个帖子顶上去这件事了。




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