编写如下代码public class A {
public String getValue() {
return getRealValue();
}
private String getRealValue() {
return "a";
}
} public class AA extends A {
protected String getRealValue() {
return "aa";
}
} 使用代码测试:
A a = new AA();
System.out.println(a.getValue());
得到输出 “a”如果把A类中的private方法getRealValue修改为protected,那就得到“aa”。为什么呀?
-----------------
在core java中看到说类似于A a = new AA(); 这样的语句,虽然a为A类型,但a指向的存储空间所保存的数据仍然是AA类型的。那这样来说应该不管是private的getRealValue还是protected,都应该得到aa呀!
public String getValue() {
return getRealValue();
}
private String getRealValue() {
return "a";
}
} public class AA extends A {
protected String getRealValue() {
return "aa";
}
} 使用代码测试:
A a = new AA();
System.out.println(a.getValue());
得到输出 “a”如果把A类中的private方法getRealValue修改为protected,那就得到“aa”。为什么呀?
-----------------
在core java中看到说类似于A a = new AA(); 这样的语句,虽然a为A类型,但a指向的存储空间所保存的数据仍然是AA类型的。那这样来说应该不管是private的getRealValue还是protected,都应该得到aa呀!
解决方案 »
- applet访问网络资源????
- JApplet中有没有和getAppletContext()方法功能一致的方法呢
- 请教java的网络传输中数据处理的问题
- 用ArrayList如何拆分字符串并统计出其中每个单词的数目
- 难,难,难,hsql update 后退出程序没有改变
- 在JList中如何按照给定要求排序
- 菜鸟问题!!请大哥大姐帮忙
- 问个SQL server的jdbc连接的问题.
- 关于Socket的流谁懂!!来着有分,大家共同探讨吗!
- 本地链接远程数据库成功,外网连接远程数据库失败,咋回事啊,大神们
- java的sdk有没有手动安装的办法?高手帮帮忙啊。
- 请问以下这种本科毕业生 到上海或广州的工资是多少? 好找工作吗??
如果不是private的话,调用的时候就动态绑定,调用子类自己的方法,就得到了楼主的结果
如果把A类中的private方法getRealValue修改为protected那么AA继承了getRealvalue()就可以覆盖它了。
A a = new AA(); 用子类创建父类,只有子类继承的变量和方法或改写父类的方法可用,而你的子类没有改写父类的方法,而是重新定义了一个新的方法了
所以过程大致如下:
A a = new AA();
System.out.println(a.getValue());
a 在执行getValue()方法时会先向上转行成A类型,执行A类型的getValue().而A类型中的getRealValue()方法是是private的,故而在调用的时候不会动态绑定到AA类型的getRealValue(),所以还是调用A类型的getRealValue()方法.