1. class Person { 2. public void printValue(int i, int j) {//... } 3. public void printValue(int i){//... } 4. } 5. public class Teacher extends Person { 6. public void printValue() {//... } 7. public void printValue(int i) {//...} 8. public static void main(String args[]){ 9. Person t = new Teacher(); 10. t.printValue(10); 11. } 12. } 第10行语句将调用哪行语句?
时间: 2023-06-09 18:03:38 浏览: 457
第七行的printValue(int i)方法。由于发生了重载,即父类和子类中都有printValue方法,因此调用哪个方法是由参数列表来决定的。在该例中,传入了一个int类型参数,符合子类中的printValue(int i)方法的定义。因此,程序会调用第七行的printValue(int i)方法。
相关问题
解释代码 1. class Person { 2. public void printValue(int i, int j) {//... } 3. public void printValue(int i){//... } 4. } 5. public class Teacher extends Person { 6. public void printValue() {//... } 7. public void printValue(int i) {//...} 8. public static void main(String args[]){ 9. Person t = new Teacher(); 10. t.printValue(10); 11. } 12. }
这段代码中定义了一个Person类和一个Teacher类,Teacher类继承自Person类。Person类中有两个重载的printValue方法,一个是带有两个int类型参数的方法,另一个是带有一个int类型参数的方法。而在Teacher类中,也定义了两个重载的printValue方法,一个不带参数,另一个带有一个int类型参数。在main方法中,通过将Teacher对象强制转换成Person类型,调用了Person类中带有一个int类型参数的printValue方法,传入参数10。根据Java中的动态绑定机制,在程序运行时,调用的是Teacher类中带有一个int类型参数的printValue方法。
有以下Java程序,请问最后的t.printValue(10)会调用哪一个方法?(选择注释中编号) class Person { public void printValue(int i, int j) { } //1 public void printValue(int i){ } //2 } public class Teacher extends Person { public void printValue() { } //3 public void printValue(int i) {} //4 public static void main(String args[]){ Person t = new Teacher(); t.printValue(10); } } A. 1 B. 2 C. 3 D. 4
B. 2。
因为 t 是 Person 类型的引用,尽管它实际引用的是 Teacher 类的一个对象,但是编译器会根据引用的类型决定可以调用哪些方法。在 Person 类中定义了一个参数为 int 的 printValue 方法,而这个方法正好符合 t.printValue(10) 的调用方式,因此该方法会被调用。而 Teacher 类中的其他方法不会被调用。
阅读全文