在子类中去super去调用父类构造函数,这是父类构造函数的this是指子类对象吗

qq_26297649 2017-01-03 02:46:42
测试类:
public static void main(String[] args) {
Cat cat=new Cat("Mini",2,"火星");
cat.say();

}
}

子类:
public class Cat extends Animal{
private String address;
public Cat(String name, int age,String address) {
super(name, age);
this.address=address;
System.out.println("子类有参构造方法");
}
/**
* 重写父类的say方法
*/
public void say(){
System.out.println("我是一只猫,我叫:"+this.getName()+"我的年龄是:"+this.getAge());
}

父类构造函数:
public Animal(String name,int age){
System.out.println("有参构造函数测试是哪个对象"+this.getClass()); //cat对象
this.say(); //调用子类自己的方法。
System.out.println("有参父类构造方法");
this.name=name;
this.age=age;
}

请问在父类的构造函数中的this指代的是子类对象吗,如果是的话为什么可以访问到父类的私有成员name
...全文
706 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
this指的就是他所在的类,为什么能得到父类属性?因为继承了啊,假如大街上有好多猫,没继承的话就没血缘关系肯定不能得到属性啊我的哥
再不斩 2017-01-17
  • 打赏
  • 举报
回复
引用 4 楼 qq_26297649 的回复:
引用 3 楼 zaibuzhankkk 的回复:
this是Cat
既然是cat,为什么可以访问对父类不能被继承的私有变量name,age赋值呢
this可以访问本类里的类变量,当前this是cat对象,并没有矛盾。 这是两个规则。 就像井盖为什么是圆的,它有内在的原因把它设计成圆的,但是生产的时候不需要关心它为什么是圆的,只要这么生产就行。
紫守笨 2017-01-03
  • 打赏
  • 举报
回复
private不能继承的,子类通过this访问父类的私有变量会报错的。 你自己给出的代码是通过this访问父类的public getter方法,当然是可以访问的。你的关键问题在于: System.out.println("有参构造函数测试是哪个对象"+this.getClass()); //cat对象 这个方法打印的是cat类而不是你设想的Animal类,其实问题没那么复杂。 1,cat类继承Animal类,在继承结构下,要么显示要么隐式的调用父类的构造方法; 2,调用构造方法实际上没有创建Animal对象,强调一点,只是调用方法而已,你可以理解为普通方法的调用,这也就是为什么这个this是cat类,因为这是cat类调用的方法,this指向的是当前对象。 不晓得,这个解释能否帮助楼主。
ryuugu_rena 2017-01-03
  • 打赏
  • 举报
回复
qq_26297649 2017-01-03
  • 打赏
  • 举报
回复
引用 8 楼 qq_32825349 的回复:
[quote=引用 7 楼 qq_26297649 的回复:] [quote=引用 5 楼 qq_32825349 的回复:] 不是的,this在哪个类里,就是指哪个类的对象。(子类对象和父类对象是没有关联的,子类继承的是父类的成员) 私有成员是可以被继承的。 java中子类对象构造时要先执行父类的构造函数,此时,这个this指向什么? 答:这个this是指子类当前的对象;虽然子类继承了父类的name,但是private修饰的不可以this.name,可以用点出get、set方法
不对啊,首先私有成员不能被继承;其次this.name不会报错的,他设置的是父类的成员变量[/quote] 如果name属性父类有,子类没有,那么在子类中this.name肯定会报错的。如果父类有并且是private String name;修饰的,也是不可以的。 还有私有成员是可以继承的,只是不能直接访问。[/quote]那么在创建子类对象用super去调用父类的构造函数,在父类的构造函数里的this.name指的是为父类的成员变量赋值吗??(虽然这边的this指的是子类对象)
qq_32825349 2017-01-03
  • 打赏
  • 举报
回复
说错了, 如果name属性父类有,子类没有,那么在子类中this.name肯定会报错的。如果父类有并且是private String name;修饰的,也是不可以的。 改为--> 子类有,肯定不报错 子类没有name,父类有且是private修饰的 ,this.name肯定报错
qq_32825349 2017-01-03
  • 打赏
  • 举报
回复
引用 7 楼 qq_26297649 的回复:
[quote=引用 5 楼 qq_32825349 的回复:] 不是的,this在哪个类里,就是指哪个类的对象。(子类对象和父类对象是没有关联的,子类继承的是父类的成员) 私有成员是可以被继承的。 java中子类对象构造时要先执行父类的构造函数,此时,这个this指向什么? 答:这个this是指子类当前的对象;虽然子类继承了父类的name,但是private修饰的不可以this.name,可以用点出get、set方法
不对啊,首先私有成员不能被继承;其次this.name不会报错的,他设置的是父类的成员变量[/quote] 如果name属性父类有,子类没有,那么在子类中this.name肯定会报错的。如果父类有并且是private String name;修饰的,也是不可以的。 还有私有成员是可以继承的,只是不能直接访问。
qq_26297649 2017-01-03
  • 打赏
  • 举报
回复
引用 5 楼 qq_32825349 的回复:
不是的,this在哪个类里,就是指哪个类的对象。(子类对象和父类对象是没有关联的,子类继承的是父类的成员) 私有成员是可以被继承的。 java中子类对象构造时要先执行父类的构造函数,此时,这个this指向什么? 答:这个this是指子类当前的对象;虽然子类继承了父类的name,但是private修饰的不可以this.name,可以用点出get、set方法
不对啊,首先私有成员不能被继承;其次this.name不会报错的,他设置的是父类的成员变量
深夜读愁 2017-01-03
  • 打赏
  • 举报
回复
this是指当前类的对象
qq_32825349 2017-01-03
  • 打赏
  • 举报
回复
不是的,this在哪个类里,就是指哪个类的对象。(子类对象和父类对象是没有关联的,子类继承的是父类的成员) 私有成员是可以被继承的。 java中子类对象构造时要先执行父类的构造函数,此时,这个this指向什么? 答:这个this是指子类当前的对象;虽然子类继承了父类的name,但是private修饰的不可以this.name,可以用点出get、set方法
qq_26297649 2017-01-03
  • 打赏
  • 举报
回复
引用 3 楼 zaibuzhankkk 的回复:
this是Cat
既然是cat,为什么可以访问对父类不能被继承的私有变量name,age赋值呢
再不斩 2017-01-03
  • 打赏
  • 举报
回复
this是Cat
qq_26297649 2017-01-03
  • 打赏
  • 举报
回复
java中子类对象构造时要先执行父类的构造函数,此时,这个this指向什么?
qq_26297649 2017-01-03
  • 打赏
  • 举报
回复
有人可以帮帮我吗。。。

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧