先看个程序先吧
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出来的明显是野马,当然不行了。