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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一蓑烟雨任平生 中级黑马   /  2012-3-23 15:28  /  4080 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Person
{
        private String name;
        Person(String name)
        {
                this.name=name;
        }
        public String getName()
        {
                return name;
        }
}
class Student extends Person
{
        Student(String name)
        {
                super(name);
        }
}
在new student("lisi")的时候,这个"lisi"是传给了Person的name吗?还有子类能继承父类的私有属性吗?

7 个回复

倒序浏览
对象的lisi传给了Student->Person也就是说,你说对了哦,确实是传给了Person
父类中的私有成员只在本类中有效
几天前我也迷惘过呵呵加油


...为什么这个论坛老是进不去..唉
回复 使用道具 举报
在new student("lisi")的时候,这个"lisi"是传给了Person的name吗?
是的,super(name);这个格式表示调用了父类的构造方法

子类不能继承父类的私有属性,其实这里说得无法继承只是子类无法访问而已。属性本身还是在子类的对象里面的的。比如用可以通过继承来的父类公共的getXxx方法和setXxx对私有属性进行获取和设置

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
(1)我觉得不能这样理解,  super(name);表示调用父类中的Person(String name){}构造函数,至于里面代码,你写怎样就是怎样,根据你所写代码{this.name=name;},你调用时,你传入一个name,那么它得到的就是当前对象的name,那么你当前对象是new student("lisi"),那么"lisi"就是Student类中这个对象的name,
(2)子类可以继承父类的所有成员跟方法,继承下来不代表可以访问,要访问得看访问控制规则。私有属性也可以继承,不过根据访问控制规则,私有属性虽继承下来却不可以访问的,只有通过public的方法访问继承下来的私有属性。
回复 使用道具 举报
本帖最后由 崔岩 于 2012-3-23 16:30 编辑

子类里是没有name的,如果你试着在Student 里引用name,会提示你父类中的name不可见,所以继承不了父类的私有成员。
你在主函数中用实例student.name时候,.不出name这个成员,因为student里没有name
你这里的super就是在子类里调用了父类的构造方法,把name付给父类的name。 你new Student的时候,也生成了一个Person的实例,只是这个实例么有名字,是个匿名对象。
回复 使用道具 举报
单就这个程序而言:new Student("lisi")   是建立了一个student类对象,建立对象时先自动调用Student(String name){}构造函数,然后通过super(name)语句调用父类构造函数Person(String name){},将lisi传给Person类中的name值
子类不能继承父类的私有属性
回复 使用道具 举报
冯建鹏 黑马帝 2012-3-23 16:47:17
7#
个人理解:
    在new student("lisi")的时候,这个"lisi"是传给了Person的name吗?
       在new student("lisi")的时候,lisi是传给了Person的构造方法里面的name参数,但是这个时候的值应该是赋值给子类student的name,因为那个时候的this是student。

               还有子类能继承父类的私有属性吗?
                        子类是不能继承父类的私有属性的。
回复 使用道具 举报
冯建鹏 黑马帝 2012-3-23 16:47:39
8#
个人理解:
    在new student("lisi")的时候,这个"lisi"是传给了Person的name吗?
       在new student("lisi")的时候,lisi是传给了Person的构造方法里面的name参数,但是这个时候的值应该是赋值给子类student的name,因为那个时候的this是student。

               还有子类能继承父类的私有属性吗?
                        子类是不能继承父类的私有属性的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马