重写与重载的区别 — 程序设计选择题
题目
设类 A 中定义了 void f(A x){ 输出"A-f(A)" },类 B extends A 中定义了 void f(B x){ 输出"B-f(B)" } 和 void f(A x){ 输出"B-f(A)" }。现执行 A obj = new B(); obj.f(new B()); 关于该调用的绑定方式与输出结果,下列判断正确的是:
A. 参数为 B 类型,故编译期静态绑定到 B.f(B),输出 B-f(B)
B. obj 编译类型为 A,编译期绑定到 A.f(A),运行期因 B.f(A) 与之构成重写而动态绑定,输出 B-f(A)
C. 三个方法互为重载,编译器无法确定调用哪个,产生编译错误
D. 编译期按 obj 的运行类型 B 绑定到 B.f(B),输出 B-f(B)