回 帖 发 新 帖 刷新版面

主题:[转帖]scjp试题解析三十四

qq:2535279

 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) }
  Which method will the statement on line 10 call?
  A. on line 2
  B. on line 3
  C. on line 6
  D. on line 7
  翻译
  第十行的声明将调用哪些方法。
  答案 D    www.javaedu.com.cn
  解析 变量t是一个Person对象,但是它是用Teacher实例化的,这个问题涉及到java的编译时多态和运行时多态的问题,就编译时多态来说,t实际上是一个Person类,这涉及到类型的自动转换(将一个子类的实例赋值给一个父类的变量是不用进行强制类型转换,反之则需要
  进行强制类型转换,而且被赋值的变量实际上应该是一个子类的对象),如果对t调用了子类中新增的方法则造成编译时错误编译将不能通过,而在运行时,运行时系统将根据t实际指向的类型调用对应的方法,对于本例来说,t.print(10)将调用t实际指向的Teacher类的对应方法。在java中,可以用一个子类的实例实例化父类的一个变量,而变量在编译时是一个父类实例,在运行时可能是一个子类实例。

回复列表 (共1个回复)

沙发

关于java 和scjp的问题,大家可以联系我:2535279

我来回复

您尚未登录,请登录后再回复。点此登录或注册