java 有关动态绑定的理解
虽然,我也经常用到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哦?
------解决方案--------------------动态绑定满足三个条件:
1。需要有继承的存在。
2。需要有方法的重写
3。父类引用指向子类对象。
你的程序都满足这三点。
当父类引用指向子类对象时。就像你的代码Father sample = new Son();// 向上转型
sample.method();
sample是不能调用子类的方法的。那么为什么程序的结果是子类的方法呢???这就是方法的覆盖。我们看到的是假象。其实sample还是调用的是父类的method()方法。但是它已经被覆盖了。原来的methoed()就变成我们看到的子类的method()。这下,你应该懂了吧。
------解决方案--------------------我觉得这个不是覆盖··而是说··Father sample = new Son()这句话··创建的是一个子类对象··但是被当作父类对象来使用··也就是说··这个命名是一个儿子,但被当作是他爸爸来使用··当你调用方法的时候,其实调用的是当前对象的方法··也就是儿子的方法··自然··输出的就是子类重写了父类的方法之后的方法的内容··
------解决方案--------------------所谓动态绑定,是这个概率搞复杂了,说白了就是,
你定义了有一个"类型" A, 这个A可能是个接口,也可能是个抽象类或是普通类,如
Java code
public class Test {
A a; //
public void setA (A aa){
this.A=aa;
}
}