虽然,我也经常用到java动态绑定的特性,但老实说,我还是对这一特性一知半解,请求谁能简单通俗的解释下哦 public class Father {
public void method() {
System.out.println(" 父类方法,对象类型:" + this.getClass());
}
} public class Son extends Father {
public void method() {
System.out.println(" 子类方法,对象类型:" + this.getClass());
}
public static void main(String[] args) {
Father sample = new Son();// 向上转型
sample.method();
}
} 运行结果大家很清楚,但是,我还是不明白,java到底是怎么动态绑定到Son对应的方法中,而不是Father哦?
public void method() {
System.out.println(" 父类方法,对象类型:" + this.getClass());
}
} public class Son extends Father {
public void method() {
System.out.println(" 子类方法,对象类型:" + this.getClass());
}
public static void main(String[] args) {
Father sample = new Son();// 向上转型
sample.method();
}
} 运行结果大家很清楚,但是,我还是不明白,java到底是怎么动态绑定到Son对应的方法中,而不是Father哦?
解决方案 »
- 新手问题:Jtree怎样添加DefaultMutableTreeNode
- 小妹是初学java语言,想随机输出4Tdf这样的混合数,请各位高手指点!!!
- 关于正则表达式
- SWING组件中,有没有控制光标状态的方法?
- 有一个包是作者自己写的:com.heaton.bot.*,我怎么在JB9下用import导入呢?老是报错。
- java二打一棋子
- 散分了
- 帮忙看一个简单的关于super的程序
- 刚学,就是不懂一点小问题,不要见笑我,什么是面对对象?
- 如何实现本地的两个JAVA程序同时访问一个链表,从而共享数据资源,是否需要使用API
- Java中关于字符串的一道面试题
- 新手求解,socket写聊天室的时候,nextLine堵塞了
1。需要有继承的存在。
2。需要有方法的重写
3。父类引用指向子类对象。
你的程序都满足这三点。当父类引用指向子类对象时。就像你的代码Father sample = new Son();// 向上转型
sample.method();
sample是不能调用子类的方法的。那么为什么程序的结果是子类的方法呢???这就是方法的覆盖。我们看到的是假象。其实sample还是调用的是父类的method()方法。但是它已经被覆盖了。原来的methoed()就变成我们看到的子类的method()。这下,你应该懂了吧。
你定义了有一个"类型" A, 这个A可能是个接口,也可能是个抽象类或是普通类,如 public class Test {
A a; //
public void setA (A aa){
this.A=aa;
}
}这样,你开始new这个Test对象是,是不是a是null (没有实例化)? 然后在程序运行中,你可以随时调用 setA给 a赋个值, 比如ccc。 这就是所谓的动态绑定。注意这个ccc一定是A的实现,或子类.注意:这里的setA方法,只是我想说明动态绑定的一种实现方法,并不是唯一的方法。
故:动态绑定就是,在程序运行中实例化某个"类型".
你说sample不能调用子类的方法,是因为覆盖,意思是非继承来的方法都丢了吗,只有Father里的方法吗,
可如果是这样,那sample强制转换为Sun类型后不是还能用非继承来的方法吗
对,sample强制转换为Sun类型后是可以用非继承来的方法的。但是没强制转换的话就不能调用子类的方法。
Java多态的内容真有这么难吗?还不结贴撒··