this是对象s,而s中没有name属性,为什么能赋值成功?
class F{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name; // this是对象s,而s中没有name属性,为什么能赋值成功?
}
}
class S extends F{
}
public class Test {
public static void main(String[] args) {
S s = new S();
s.setName("ddd");
}
}
private属性是隐藏并不是存在,子类也是拥有name属性的,平时不可见,但是调用public方法的时候,public是一个大嘴巴,告诉子类父类拥有的private属性,此时子类知道自己还有这个属性,自然也就可调用这个属性了。望采纳
父类的属性虽然是private,但是get,set方法都是public的。在子类中不能直接调用父类的私有属性,但是通过get,set方法完成类设置,private属性不可见不代表不存在
1 this.name=name中这个this指的是你声明的那个字段private String name中的name,意思是将你的入参name赋给你声明private的那个name,从而用于使用。
2 class S继承F,继承通俗的讲法就是子类能够使用父类共用的方法,所以S s = new S();s.setNmae(xx)当然可以使用F中的name.
因为S继承了F,而F中存在get 和set 方法,通过该方法可以访问父类属性;this同样拥有父类的get set 方法和私有属性,只不过private的属性不可以在子类直接访问,需要通过暴露的get和set方法来访问。
extends
S继承F父类,所以可以。
子类是父类的扩展,它其实包括父类的所有东西。只是有些private的子类没有权限去访问,当它调用父类的public方法的时候,父类的public方法可以访问自己的private成员。
子类继承父类,当然也会把相关的属性一起继承下来啊。。。。
子类越塔反沙!
因为你没有重写set方法,你调用的就是父类里面的set方法,那么这个this指的是父类也就是F ,不是你理解的this是S这个操作