子类有和父类同名的实例变量的问题(见代码)

程猿薇茑
Java领域优质创作者
博客专家认证
2016-10-26 02:22:38

class Demo {
public static void main(String[] args) {
Zi z= new Zi();
System.out.println(z.a + z.s) ;
z.show();//子类的对象去调用的show,当前对象应该是子类对象啊,为什么输出的结果是父类的成员变量值?
}
}

class Fu {
private int a;
String s = "www";

public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}

public void show(){
System.out.println(this.a);
System.out.println(this.s);
System.out.println(this.getClass());
}
}

class Zi extends Fu{
int a = 123;
String s = "niao";
}

...全文
465 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
nikyotensai 2016-10-27
  • 打赏
  • 举报
回复
引用 5 楼 zpcandzhj 的回复:
[quote=引用 4 楼 qq_26508409 的回复:] [quote=引用 3 楼 zpcandzhj 的回复:] [quote=引用 2 楼 qq_26508409 的回复:] 你有没有想过如果Zi里面没s会怎么样。成员变量有不能override
引用 1 楼 qnmdcsdn 的回复:
你在子类中重写show方法就会调用子类的了
能不能解释一下程序执行的过程,我也知道重写show方法就会调用子类的了 为什么this.getClass()显式是子类,缺显示的父类的成员变量[/quote] 父类无法调用子类成员变量。show方法属于父类,父类用不了子类的s[/quote] 好乱的感觉[/quote] 哪乱!
NewMoons 2016-10-27
  • 打赏
  • 举报
回复
实际的设计中,一般都是方法的覆盖,成员变量的覆盖没有任何意义,所以真实的代码中你不会遇到成员变量的覆盖,就此打住吧。 你这个问题已经有N个人问过了,确实容易产生迷惑。不过看到这希望你不要再钻牛角尖了,否则就是浪费时间。
NewMoons 2016-10-27
  • 打赏
  • 举报
回复
1楼和2楼已经说得很清楚了,方法可以覆盖,成员变量不能覆盖,这是规则!无它!
老兵与新兵 2016-10-27
  • 打赏
  • 举报
回复
nikyotensai 2016-10-27
  • 打赏
  • 举报
回复
引用 7 楼 zhangscheng922 的回复:
[quote=引用 6 楼 qq_26508409 的回复:] [quote=引用 5 楼 zpcandzhj 的回复:] [quote=引用 4 楼 qq_26508409 的回复:] [quote=引用 3 楼 zpcandzhj 的回复:] [quote=引用 2 楼 qq_26508409 的回复:] 你有没有想过如果Zi里面没s会怎么样。成员变量有不能override
引用 1 楼 qnmdcsdn 的回复:
你在子类中重写show方法就会调用子类的了
能不能解释一下程序执行的过程,我也知道重写show方法就会调用子类的了 为什么this.getClass()显式是子类,缺显示的父类的成员变量[/quote] 父类无法调用子类成员变量。show方法属于父类,父类用不了子类的s[/quote] 好乱的感觉[/quote] 哪乱![/quote] 那为什么this.class打印的是子类呢,明显这时候this指向的是子类对象,那为什么this.a却指向的是父类呢???[/quote] 回答你有分吗
  • 打赏
  • 举报
回复
引用 6 楼 qq_26508409 的回复:
[quote=引用 5 楼 zpcandzhj 的回复:] [quote=引用 4 楼 qq_26508409 的回复:] [quote=引用 3 楼 zpcandzhj 的回复:] [quote=引用 2 楼 qq_26508409 的回复:] 你有没有想过如果Zi里面没s会怎么样。成员变量有不能override
引用 1 楼 qnmdcsdn 的回复:
你在子类中重写show方法就会调用子类的了
能不能解释一下程序执行的过程,我也知道重写show方法就会调用子类的了 为什么this.getClass()显式是子类,缺显示的父类的成员变量[/quote] 父类无法调用子类成员变量。show方法属于父类,父类用不了子类的s[/quote] 好乱的感觉[/quote] 哪乱![/quote] 那为什么this.class打印的是子类呢,明显这时候this指向的是子类对象,那为什么this.a却指向的是父类呢???
程猿薇茑 2016-10-26
  • 打赏
  • 举报
回复
引用 4 楼 qq_26508409 的回复:
[quote=引用 3 楼 zpcandzhj 的回复:] [quote=引用 2 楼 qq_26508409 的回复:] 你有没有想过如果Zi里面没s会怎么样。成员变量有不能override
引用 1 楼 qnmdcsdn 的回复:
你在子类中重写show方法就会调用子类的了
能不能解释一下程序执行的过程,我也知道重写show方法就会调用子类的了 为什么this.getClass()显式是子类,缺显示的父类的成员变量[/quote] 父类无法调用子类成员变量。show方法属于父类,父类用不了子类的s[/quote] 好乱的感觉
nikyotensai 2016-10-26
  • 打赏
  • 举报
回复
引用 3 楼 zpcandzhj 的回复:
[quote=引用 2 楼 qq_26508409 的回复:] 你有没有想过如果Zi里面没s会怎么样。成员变量有不能override
引用 1 楼 qnmdcsdn 的回复:
你在子类中重写show方法就会调用子类的了
能不能解释一下程序执行的过程,我也知道重写show方法就会调用子类的了 为什么this.getClass()显式是子类,缺显示的父类的成员变量[/quote] 父类无法调用子类成员变量。show方法属于父类,父类用不了子类的s
程猿薇茑 2016-10-26
  • 打赏
  • 举报
回复
引用 2 楼 qq_26508409 的回复:
你有没有想过如果Zi里面没s会怎么样。成员变量有不能override
引用 1 楼 qnmdcsdn 的回复:
你在子类中重写show方法就会调用子类的了
能不能解释一下程序执行的过程,我也知道重写show方法就会调用子类的了 为什么this.getClass()显式是子类,缺显示的父类的成员变量
nikyotensai 2016-10-26
  • 打赏
  • 举报
回复
你有没有想过如果Zi里面没s会怎么样。成员变量有不能override
  • 打赏
  • 举报
回复
你在子类中重写show方法就会调用子类的了

62,614

社区成员

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

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