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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王新春 黑马帝   /  2011-11-13 20:21  /  2056 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

坚强 黑马帝 2011-11-14 09:04:01
楼主
  private是私有的,但是Person(String name)这个构造函数给调用程序的人留了个入口,可以操作name变量了,并且赋值给name了,子类中的spuer(name)就已经赋值好了,之后就打印输出了。
回复 使用道具 举报
本帖最后由 王新春 于 2011-11-22 16:44 编辑

父类中的name不是私有化了吗,那么当student继承person类之后,不是没有name,但是怎么会能输出子类中传入的参数“张三”呢?
public class ExtendsDemo {
        public static void main(String[] args) {
                Student s1=new Student("张三");
        }

}
class Person
{
    private String name;
    Person(String name)
    {
            this.name=name;
    }
}
class Student extends Person
{
        Student(String name)
        {
                super(name);
                System.out.println(name);
        }
       
}

5 个回复

倒序浏览
子类中System.out.println(name); 这句中的name是子类构造方法传进来的name 这个跟父类没有任何的关系
回复 使用道具 举报
杨杰 黑马帝 2011-11-13 20:43:59
板凳
{:soso_e113:}你试试super.name;
回复 使用道具 举报
super(name)是调用父类的构造方法的,这个跟你说的那个name是私有的没有关系的,只是不可以直接拿来在子类中使用
回复 使用道具 举报
public class ExtendsDemo {
        public static void main(String[] args) {
                Student s1=new Student("张三");
        }

}
class Person
{
    private String name;
    Person(String name)
    {
            this.name=name;
    }
}
class Student extends Person
{
        Student(String name1)
        {
                super(name1);
                System.out.println(name1);
        }
        
}
这样你可能就明白了,此时的name1是个临时变量,与Person中的name无关
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马