class Father{
void set(){
System.out.println("Father‘s set!");}
void differ1(){
System.out.println("differ1");}
}class Son extends Father{
void set(){
System.out.println("Son's set!");}
void differ2(){
System.out.println("differ2");}public static void main(String[] args){
Father f=new Son();
f.set(); //输出的结果为Son's set!
f.differ1(); //输出的结果为differ1
f.differ2(); //编译错误。找不到该方法
}
}如上面的例子(我用记事本写的,可能有笔误)。
我有个疑问:不应该是变量是静态绑定,方法是动态绑定么?那么f的引用指向的应该是Son的对象,调用的方法应该是son中的方法。那么f.differ2()为什么找不到该方法呢?同样是调用方法,为什么调用重写的set方法为什么是Son的set方法呢?请问原因是什么?我对这个问题很迷糊。。
void set(){
System.out.println("Father‘s set!");}
void differ1(){
System.out.println("differ1");}
}class Son extends Father{
void set(){
System.out.println("Son's set!");}
void differ2(){
System.out.println("differ2");}public static void main(String[] args){
Father f=new Son();
f.set(); //输出的结果为Son's set!
f.differ1(); //输出的结果为differ1
f.differ2(); //编译错误。找不到该方法
}
}如上面的例子(我用记事本写的,可能有笔误)。
我有个疑问:不应该是变量是静态绑定,方法是动态绑定么?那么f的引用指向的应该是Son的对象,调用的方法应该是son中的方法。那么f.differ2()为什么找不到该方法呢?同样是调用方法,为什么调用重写的set方法为什么是Son的set方法呢?请问原因是什么?我对这个问题很迷糊。。
解决方案 »
- JDBC
- message.getContent().toString不能得到邮件正文
- 请问dom4j输出xml时,怎么输出&?
- 有关string中的charAt用法!
- think in java4 中,<<<处理byte short char的解释 在线等,解决立即给分
- 有关JAVA套接字程序问题!请教大家!先谢谢了
- 大家幫忙給看看了
- 请问J2SDK1.2.1在XP中的环境变量怎样设置?
- 关于webspere+oracle服务器配置问题,解决给分600分!!(急急!!)
- 请问各位在JBuilder4种如何测试一个已编好的Bean
- JTable 怎么也刷新不???
- HIbenate 关键字做为字段问题
1.要有继承
2.要有方法的重写
3.父类引用指向子类对象 LZ不要重复发贴了http://topic.csdn.net/u/20090426/16/02b0ad12-2843-4ab1-8d31-d92c2a7b20cb.html另外要记得结贴,不然没人回你啦
set()楼主正好在father的子类中覆盖了,实际运行时根据动态绑定,jvm决定了调用子类的该方法
differ1()方法未在子类中覆盖,因此实际调用的肯定是父类的。
那为什么“能使用父类的动作(向上还原),因此找不到子类才有的differ2() ”
动态绑定不是应该使用new后面跟的对象的方法么?