1.以下程序的输出结果为()
class Base {
public Base(String s) {
System.out.print("B");
}
}
public class Derived extends Base {
public Derived(String s) {
System.out.print("D");
}
public static void main(String[] args) {
new Derived("C");
}
}
选项:
A:BD
B:DB
C:C
D:编译错误正确答案:D
解析:子类没有调用父类的构造方法
2.以下程序的输出结果为()
class Base {
public void method() {
System.out.println("Base");
}
}
class Son extends Base {
public void method() {
System.out.println("Son");
}
public void methodB() {
System.out.println("SonB");
}
}
public class Test {
public static void main(String[] args) {
Base base = new Son();
base.method();
base.methodB();
}
}
选项:
A:Base SonB
B:Son SonB
C:Base Son SonB
D:编译不通过正确答案:D
解析:<多态性>父类引用不能调用子类方法
3.以下说法错误的是()
A: 虚拟机中没有泛型,只有普通类和普通方法
B: 所有泛型类的类型参数在编译时都会被擦除
C: 创建泛型对象时请指明类型,让编译器尽早的做参数检查
D: 泛型的类型擦除机制意味着不能在运行时动态获取List<T>中T的实际类型
正确答案:D
解析:泛型停留在编写阶段就是为了让编译器提前检查。编译期类型擦除,运行时根本不会有List<T>的这个T,运行时其实就只是个List,没有后面的<T>了。
4.Java接口的修饰符可以为()
A: private
B: protected
C: final
D: abstract
正确答案:D
5.下面有关List接口、Set接口和Map接口的描述,错误的是()
A: 他们都继承自Collection接口
B: List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置
C: Set是一种不包含重复的元素的Collection
D: Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value
正确答案:A解析:List接口和Set接口继承自Collection接口,Map接口与Collection接口是并列关系。
6.子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块 执行的先后顺序是()
A: 父类B静态代码块->父类B构造函数->子类A静态代码块->父类B非静态代码块->子类A构造函数->子类A非静态代码块
B: 父类B静态代码块->父类B构造函数->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块
C: 父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函数
D: 父类B构造函数->父类B静态代码块->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块
正确答案:C
解析:
- 执行父类的静态成员变量定义与静态初始化块,执行子类的静态成员变量定义与静态初始化块
- 执行父类的非静态成员变量定义与动态初始化块,执行父类构造方法
- 执行子类的非静态成员变量定义与动态初始化块,执行子类构造方法