HKDXiaoFan 2017-12-07 11:15 采纳率: 0%
浏览 2557

父类变量私有化后,在子类的构造方法中,为什么使用父类构造方法super(参数),可以给子类对象赋值

```class Person
{
//私有属性是不能被继承的
private String name ;
private int age;
//构造方法
public Person()
{

    }
    public Person(String name,int age)
    {
        this.name = name ; 
        this.age = age;
    }
    //set/get方法
    //继承了set/get方法,
    public void setName(String name)
    {
        this.name = name;
    }
    public String  getName() 
    {
        return this.name;
    }
    public void setAge(int age)
    {
        this.age = age;
    }
    public int getAge() 
    {
        return this.age;
    }
    //吃饭
    public void eat() 
    {
        System.out.println("吃饭");
    }

}
//老师类
class Teacher extends Person1
{

//有参数的构造方法
public Teacher(String name ,int age)
{
super(name,age);//为什么用父类的构造方法能够给子类的变量赋值??????????????
}

//讲课

public void jiangKe()
{
System.out.println(this.getName() +"讲课");
}
}

为什么在子类的构造方法中,super(参数 ),可以给子类的变量赋值,super()调用的不是父类的构造方法吗

  • 写回答

5条回答

  • diuqiuren1234 2017-12-07 12:26
    关注

    你好,确实你的代码里父类Person的私有化成员name、age,子类Teacher没有直接操作的权限(你用编译器自动补全功能也能发现这个现象)因此使
    用了public的set/get方法在子类操作父类属性,但是你的代码里子类Teacher并没有属于它自己的变量啊,其次super()确实是调用父类的构造方法,父类中要有相应的构造方法相对应(指参数类型、数量、顺序等一致),使用了super()改变的只是父类成员的值,例如实例化一个子类对象teacher,使用
    子类构造方法public Teacher(String name,int age){super(name,age);}(这里我想再提下代码里子类Teacher没有自己的name、age属性,要测试的话可以自己加上看看,Teacher t = new Teacher("a",1);)再用get方法t.getAge();查看输出,再打印输出子类的age,看看两个大小是否一致,这样你应该
    更能发现super()的作用了,总计下super()调用的是父类构造方法、公有化成员、成员方法

    评论

报告相同问题?

悬赏问题

  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?