有关成员变量 继承 隐藏与覆盖的一个问题

floatboy3 2011-06-27 03:51:11
public class SuperClass {
int y=0;

public void print(){
System.out.println(y);
}


}

public class SubClass extends SuperClass{
int y=1;

public static void main(String[] args) {
SubClass sub=new SubClass();
sub.print();
}


}

这里打印的结果为3!

子类不是应该把父类的成员变量隐藏了吗,为什么还是打印出父类的变量?
...全文
107 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
牙痴 2011-06-29
  • 打赏
  • 举报
回复
this.y ....
qybao 2011-06-27
  • 打赏
  • 举报
回复
LZ要明白一个问题,每个类有自己的class文件,也就是每个类的伪代码写在自己的class文件里
想想看,父类的print方法被编译为伪代码写到父类的class文件中的时候,编译器能知道这个y是来自子类的class吗?
floatboy3 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 floatboy3 的回复:]
引用 2 楼 floatboy3 的回复:
引用 1 楼 pipi517 的回复:
打印的结果为3?可能吗

public class SuperClass {
int y=3;

public void print(){
System.out.println(y);
}


}

public class SubClass extends SuperClass{
i……
[/Quote]

多态指的都是方法。这个是属性。!是这个原因吗
qybao 2011-06-27
  • 打赏
  • 举报
回复
又是这个问题,可以看看

http://topic.csdn.net/u/20110626/14/dd92aaec-1c82-450d-a0a4-273d8cb6103c.html

floatboy3 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 floatboy3 的回复:]
引用 1 楼 pipi517 的回复:
打印的结果为3?可能吗

public class SuperClass {
int y=3;

public void print(){
System.out.println(y);
}


}

public class SubClass extends SuperClass{
int y=4;

public stati……
[/Quote]


只是疑惑为什么不使用子类已经覆盖掉的成员变量,跟子类覆盖父类的方法效果不一样!前几天才注册的,呵呵
floatboy3 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jingyuwang1 的回复:]
你的SubClass类中根本就没有print()方法好不,所以只能继承父类的print()方法了,楼上说的在理
[/Quote]

可是子类的成员变量 不是已经 把父类的成员变量隐藏了吗???成员变量怎么会不像覆盖方法那样调用子类已经覆盖掉的成员
jingyuwang1 2011-06-27
  • 打赏
  • 举报
回复
你的SubClass类中根本就没有print()方法好不,所以只能继承父类的print()方法了,楼上说的在理
皮皮 2011-06-27
  • 打赏
  • 举报
回复
SubClass sub=new SubClass();
sub.print(); 你这方法就调用的父类的。所以。。。

你在SubClass也加入

public void print(){
System.out.println(y);
}
再看。

还有。你结贴结帖率:0.00% 太吓人了。
floatboy3 2011-06-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pipi517 的回复:]
打印的结果为3?可能吗
[/Quote]
public class SuperClass {
int y=3;

public void print(){
System.out.println(y);
}


}

public class SubClass extends SuperClass{
int y=4;

public static void main(String[] args) {
SubClass sub=new SubClass();
sub.print();
}


}

不好意思,写错了。
皮皮 2011-06-27
  • 打赏
  • 举报
回复
打印的结果为3?可能吗

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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