weixin_43800329
weixin_438003299
2018-12-19 16:15
采纳率: 58.3%
浏览 2.6k
已采纳

java中的继承调用get、set方法

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");
}
}


  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • weixin_37486553
    燕双嘤嘤 2018-12-19 09:51
    已采纳

    private属性是隐藏并不是存在,子类也是拥有name属性的,平时不可见,但是调用public方法的时候,public是一个大嘴巴,告诉子类父类拥有的private属性,此时子类知道自己还有这个属性,自然也就可调用这个属性了。望采纳

    点赞 2 评论
  • CLASSICSOLO
    Neoze 2018-12-19 08:26

    父类的属性虽然是private,但是get,set方法都是public的。在子类中不能直接调用父类的私有属性,但是通过get,set方法完成类设置,private属性不可见不代表不存在

    点赞 2 评论
  • qq_34872748
    L星火燎原 2018-12-19 08:31

    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.

    点赞 评论
  • san8250
    san8250 2018-12-19 08:38

    因为S继承了F,而F中存在get 和set 方法,通过该方法可以访问父类属性;this同样拥有父类的get set 方法和私有属性,只不过private的属性不可以在子类直接访问,需要通过暴露的get和set方法来访问。

    点赞 评论
  • it_zhangwei
    路漫漫兮其修远兮 2018-12-19 09:23

    因为你没有重写set方法,你调用的就是父类里面的set方法,那么这个this指的是父类也就是F ,不是你理解的this是S这个操作

    点赞 评论
  • qq_35919072
    qq_35919072 2018-12-19 09:48

    extends
    S继承F父类,所以可以。

    点赞 评论
  • weixin_43932079
    剑过不留名 2018-12-19 09:51

    子类是父类的扩展,它其实包括父类的所有东西。只是有些private的子类没有权限去访问,当它调用父类的public方法的时候,父类的public方法可以访问自己的private成员。

    点赞 评论
  • qq_31499975
    墨妖吻我 2018-12-20 09:13

    子类继承父类,当然也会把相关的属性一起继承下来啊。。。。

    点赞 评论

相关推荐