为了账号安全,请及时绑定邮箱和手机立即绑定

Java中子类继承父类关于成员变量的调用问题

Java中子类继承父类关于成员变量的调用问题

犯罪嫌疑人X 2018-12-06 16:36:31
class Demo{   public static void main(String[] args){     Son s = new Son();     s.show();     System.out.println(Son.name);   }}class Father {   String name = "father";   public void show(){     System.out.println( name + " father测试~~~");   }}class Son extends Father{   String name = "son";} 特别不理解,调用的时候为什么输出name的值为fater呢???继承不是this代表子类对象啊??求大神指导
查看完整描述

6 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

假设父类 a=1 b=2 c=3

子类重写了 a=11 b=22

那么调用输出的时候

a=11 b=22 c=3    ?

------------

你子类只是给成员变量name赋值了。 成员函数 show方法没有重写。main调用show的时候是父类的show(),而父类show的是父类的name。你重写子类的 show方法试试,调用的就是子类的name了。

查看完整回答
反对 回复 2018-12-16
  • 慕娘6173359
    慕娘6173359
    我觉得完整的逻辑应该是,在子类son中现在有两个name,一个是自己的“son”还有一个是父类的“father”,在son这个类里面,这两个name都是可见的,但是“father”不能直接被访问到,只能将son向上造型((Father)son.name)或者调用父类的方法访问(因为父类father里面,子类的name“son”不可见,)。现在就恰好是上述的第二种情况,show方法在父类里面,子类的name对他来说不可见,因此show方法中打印的那个name是父类的name"father",而不是“son"。
?
万千封印

TA贡献1891条经验 获得超3个赞

不写public的时候是不是默认private?

查看完整回答
反对 回复 2018-12-16
?
冉冉说

TA贡献1877条经验 获得超1个赞

不是啊~~~应该是调用机制在继承这块我有点晕~~~

查看完整回答
反对 回复 2018-12-16
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

@Goorwl: @Goorwl: 你没有重写也没用new覆盖.所以父类中调用的父类.子类中调用的是子类.

查看完整回答
反对 回复 2018-12-16
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

你调用的父类的方法,如果没有重写,父类会显示基类的字段直

查看完整回答
反对 回复 2018-12-16
  • 6 回答
  • 0 关注
  • 1562 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信