public class Father{
Father(){
aa();
}
public void aa(){
System. out.println("father's aa");
}
}
public class Son extends Father{
Son(){
}
public void aa(){
System.out.println("son's aa");
}
public static void main(String args[]){
new Son();
}
}本人知道他是因为动态绑定才会输出son's aa 但为什么动态绑定他就找最终子类的在父类申明有接口的方法 也有这样的输出方式 Father father = new Son();father.aa(); 书上说因为编译前father不知道后面是什么,直到运行时才知道 麻烦能讲深点
Father(){
aa();
}
public void aa(){
System. out.println("father's aa");
}
}
public class Son extends Father{
Son(){
}
public void aa(){
System.out.println("son's aa");
}
public static void main(String args[]){
new Son();
}
}本人知道他是因为动态绑定才会输出son's aa 但为什么动态绑定他就找最终子类的在父类申明有接口的方法 也有这样的输出方式 Father father = new Son();father.aa(); 书上说因为编译前father不知道后面是什么,直到运行时才知道 麻烦能讲深点
解决方案 »
- 运行Twaver.jar教程里的tutorial示例到step3,图像显示不出来~~
- JTree如何在展开时动态添加节点
- 弱弱的问一句,csdn论坛上让放网址吗?
- 请问我这样让一个程序控制另一个程序运行会有问题吗?
- 关于虚拟机不能关闭的问题
- 关于直接插入排序的问题(我觉得代码不对但是运行结果确实对的,很奇怪)
- 想了解一下JAVA有几种排序?尽可能详细些!请提供代码!谢谢!
- 开发一个CRM系统,.NET和JAVA开发那个好一些
- 没有JAVA开发经验,能找到JAVA的工作么?
- 新手请教:我用Jbuilder3编了个Applet(曲线图),用AppletViewer看没问题,可若直接用浏览器看就看不见了,鼠标放在Applet上就提示Load:class XXX not found不知是怎么回事
- 好奇怪啊,怎么搞不懂了
- 70高分``在线等``Jtree问题!
Father father = new Son();//只是实例化Son之后,把这个乡上转型为Father 类型,但是它没有丢掉自己的原来类型,因为java是执行期辨别机制,我说的是非静态方法,所以执行期jvm会找到它原来的类型,并且执行相应的方法father.aa();
确实向上转型为Father 但是他输出的是子类覆盖的方法的内容阿 像一般在父类中没有子类扩充的方法 父类是看不到的 这样写father是调用不了的 只有覆盖父类的方法 他才调用子类的相同方法
最终调用哪个方法,是看实际的对象是哪个类的,而不是看你声明的是什么类型。对象是a的就调a的,对象是b的就调b的。