![](https://csdnimg.cn/release/download_crawler_static/87582381/bg6.jpg)
12.
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
解析 变量 t 是一个 Person 对象,但是它是用 Teacher 实例化的,这个问题涉及
到 java 的编译时多态和运行时多态的问题,就编译时多态来说,t 实际上是一个
Person 类,这涉及到类型的自动转换(将一个子类的实例赋值给一个父类的变量
是不用进行强制类型转换,反之则需要进行强制类型转换,而且被赋值的变量实
际上应该是一个子类的对象),如果对 t 调用了子类中新增的方法则造成编译时
错误编译将不能通过,而在运行时,运行时系统将根据 t 实际指向的类型调用对
应的方法,对于本例来说,t.print(10)将调用 t 实际指向的 Teacher 类的对应方法。
在 java 中,可以用一个子类的实例实例化父类的一个变量,而变量在编译时是
一个父类实例,在运行时可能是一个子类实例。
13. Which are not Java primitive types?
A. short
B. Boolean
C. unit
D. float
翻译:下面哪些不是 java 的原始数据类型。
答案:B,C