大佬快进来,求解!!!父类可以代替子类为参数仅仅是多态性的支持?

先看个程序先吧

class A{
    public String show(C obj) {
        return ("A and C");
    }

    public String show(A obj) {
        return ("A and A");
    }

}
class B extends A{
    public String show(B obj) {
        return ("B and B");
    }
}
class C extends B{
    public String show(A obj) {
        return ("A and B");
    }
}
public class Demo1 {
    public static void main(String[] args) {
        A a=new A();
        B b=new B();
        C c=new C();
        System.out.println("第一题 " + a.show(a));
        System.out.println("第二题 " + a.show(b));
        System.out.println("第三题 " + a.show(c));
    }
}
运行结果:
        第一题 A and A
        第二题 A and A
        第三题 A and C

我的理解就是:主要是多态性的支持。

如果有大佬理解的更深入那就更好了,让小生了然!!!感激不尽感激不尽感激不尽!!!

是父类做为参数类型,但是可以传子类的参数进去吗
回答,是可以的,子类天然就是父类,比如中国人肯定是人

反过来不行,人不一定是中国人,如果父类传给子类,就需要强制类型转换

满意请采纳

子类在初始化话的时候是会构造出父类的,子类可以代替父类进行参数传递,因为子类有父类的构造方法,在自己创建的时候,会先加载其父类

你调用的是a.show()的方法,当时传入B时,执行的肯定是show(A obj)这个方法啊,和你在B里重写的A的方法并没有任何关系

你是想问第二个为什么能运行吧。如果是这样的话你应该见过这种写法

A b = new B()

因为B继承自A所以可以声明A类型的B,也就是本质上B也算A类型。

你的show重载了2个:一个需要传A一个需要传C
当你传B时,没有B这个重载项,但B是A的子类,当然是调用public String show(A obj)这个重载方法了
举例:
有2个门:一个门只能动物(A)才能进,一个门只能白马(C)才能进。
现在一个白马来了,他肯定很愉快的进白马门了,那他不能进动物门吗,当然可以只要到动物门前动一下证明你是动物(强转成A)就可以进去了。
现在一个穿着衣服的马来了,看不清是什么颜色。虽然不知道是什么马,但动物们肯定能进去了(相当于隐式强转)。如果他想进白马门可以吗?如果他真的是白马当然可以,但你new出来的明显是野马,当然不行了。