这个是在论坛里面看到的帖子,感觉对我等新人很有帮助,只是下面回复的答案有点看不懂,希望有大神能详细的解释下!谢谢public class DuoTaiTest{
public static void main(String[] args){
A a1 = new A();
A a2 = new B();
B b = new B();
C c = new C();
D d = new D();
class A {
public String show(D obj) {
return ("A and D");
}
public String show(A obj) {
return ("A and A");
}
}
class B extends A {
public String show(B obj) {
return ("B and B");
}
public String show(A obj) {
return ("B and A");
}
}
class C extends B {
}
class D extends B {
}
下面是回复的答案:
⑴ A and A 传入对象b,b是a的子类,由public String show(A obj)接收
⑵ A and A 传入对象c,c是a的子类,由public String show(A obj)接收
⑶ A and D 传入对象d,直接由public String show(D obj)接收
⑷ B and A 传入对象b,因为多态的局限性,只能访问父类中的成员,而A类中并没有public String show(B obj),所以由public String show(A obj)接收
⑸ B and A 同(4)
⑹ A and D 传入对象d,因为B类继承了A类中的public String show(D obj)方法,所以直接由public String show(D obj)接收
⑺ B and B 传入对象b,直接由public String show(B obj)接收
⑻ B and B 传入对象c,c是b的子类,由public String show(B obj)接收
⑼ A and D 同(6)
能不能请童鞋们帮我详细的分析一下这个实现的过程:
a1.show(b);
然后我记得这么一句话:编译看左边,运行看右边,
应该怎么把这句话结合进去呢?
编译看左边,这个a1.show(b)怎么才能够用这句话实现呢?
谢谢大家了 作者: Stephen_Chow 时间: 2013-10-24 11:46
很简单啊, A a1 = new A(); 是声明了一个A的对象a1;然后 System.out.println("⑴ " + a1.show(b));
中的a1.show(b)就是对象调用方法呗。传入的b是一个B类的实例。
再看A类的方法:class A {
public String show(D obj) {
return ("A and D");
}
public String show(A obj) {
return ("A and A");
}
}因为B类继承了A类,所以这里使用了多态。及调用了方法:public String show(A obj) {
return ("A and A");
}
函数参数传递:【A obj = b;】及使用多态:父类引用指向子类对象。