java子类参数传递给父类_java – 为什么调用将父类作为参数的方法调用,而不是将子类作为参数获取的方法?...

我有一个名为A的类,以及一个名为B的类,它扩展了A.

玩一些方法来理解多态行为,我遇到了一个奇怪的情况.

public class Main {

public static void main(String[] args){

B b = new B();

A a = b;

b.f1(a);

}

}

public class A {

.

.

.

public void f1(A a){

if(a instanceof B)

f1((B)a);

else

System.out.println("Nothing");

}

.

.

.

}

public class B extends A {

.

.

.

public void f1(B b){

System.out.println("B::f1(B)");

}

.

.

.

}

我期望A类中的f1首先被调用(因为a是A类型)实际发生了.然后我预料到行f1((B)a);被称为,因为a是B的一个实例.到现在为止,一切都按预期进行.但是,我认为下一个将被调用的方法是B类中的f1(B).相反,A类中的f1(A)被反复调用,导致堆栈溢出异常.为什么不叫B级的f1(B)? B的一个实例是调用者,参数被强制转换为B类.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值