【发布时间】:2022-01-05 00:36:13
【问题描述】:
做这个java练习我不明白为什么最后一行打印出“5”。
public class Customer { }
public class RegisteredCustomer extends Customer{}
public class Shop {
public int computeDiscount(Customer c){return 0;}
}
public class OnlineShop extends Shop {
public int computeDiscount(Customer c){return 5;}
public int computeDiscount(RegisteredCustomer c){return 15;}
}
public class OnlinePremiumShop extends OnlineShop{
public int computeDiscount(RegisteredCustomer c){return 20+super.computeDiscount(c);}
}
public static void main(String[] args) {
RegisteredCustomer c3 = new RegisteredCustomer();
Shop s2 = new OnlinePremiumShop();
System.out.println(s2.computeDiscount(c3));
}
如果c3既是动态类型又是静态类型RegisteredCustomer,为什么java会捕获带有Customer参数的方法?我想我对绑定感到困惑..思考不出错的过程是什么?
【问题讨论】:
-
请显示驱动此示例的
main()方法。 -
s2是Shop类型的变量,它只有一个方法computeDiscount(Customer c),因此在调用s2.computeDiscount(c3)时只能选择此方法。您还期望发生什么其他事情?为什么?
标签: java polymorphism dynamic-binding