父类变量私有化后,在子类的构造方法中,为什么使用父类构造方法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个回答

你这是用super()给父类的对象赋值,赋值之后你可以在子类中通过父类中的getter,setter方法在子类中得到所附的值, 而不是你在用super给子类赋值

你好,确实你的代码里父类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()调用的是父类构造方法、公有化成员、成员方法

diuqiuren1234
diuqiuren1234 回复HKDXiaoFan: 不好意思,这么久了才回复,我的意思只是贴的代码里Teacher类没有写出属于Teacher的name属性来(这样说应该更准确),但Teacher类可是继承了Person类,Teacher自然也继承了父类的非私有属性(关于私有属性是否被继承你可以参考知乎上的见解,https://www.zhihu.com/question/51345942/answer/145388196,同时子类没有权限直接操作父类私有化属性的值,我那么多话其实只想说下super的特点,你应该测试过子类和父类有同名成员变量的情况吧(不论私有、公共),此时再用super方法或this分别做测试,我一开始认为你想了解的只是简单的super用法、特点,现在觉得你应该更想也更需要了解继承的关系和特点
2 年多之前 回复
HKDxiaofan
HKDXiaoFan Teacher t = new Teacher("a",1),我们teacher类中的get方法得到的值t.getName = a
2 年多之前 回复
HKDxiaofan
HKDXiaoFan 你的意思是说super()是给Person类的对象赋值的,用getAge方法得到的值其实也是Person类对象的值吗,Teacher类对象其实没有name的吗
2 年多之前 回复

抱歉,上个回答格式不整齐,暂时用不惯问答的换行功能,我想大概知道问题的情况了,可能你代码里子类本就没有name、age属性,不过没关系

记住super方法特点还是没错的

是调用的父类的构造函数没错啊,调完了父类被实例化,age和name被赋值,子类继承get方法,调用get方法获取的就是上面被赋值的age和name

虽然说属性是私有的,但是你有get方法,可以获得父类的属性的值

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐