1.关于包的说法,下列错误的是
A.包是一组类的集合
B.包能防止类名字冲突
C.import语句能够导入一个指定的包
D.import static能够导入一些静态方法
答案:C
原因:import语句能够导入一个具体的类
2. A 派 生出子类 B , B 派生出子类 C ,并且在 java 源代码有如下声明:
A a0=new A();
A a1=new B();
A a2=new C();
问以下哪个说法是正确的
A.只有第一行能通过编译
B.第1、2行能通过编译,但第3行编译出错
C.第1、2、3行能通过编译,但第2、3行运行时出错
D.第1行,第2行和第3行的声明都是正确的
答案:D
class A{
}
class B extends A{
}
class C extends B{
}
public class TestDemo {
public static void main(String[] args) {
A a0=new A();//实例化自己
A a1=new B();//父类引用 引用子类对象
A a2=new C();//A也是C的父类
}
}
3.如下代码的 结果是什么 ?
class Base {
Base() {
System.out.print("Base");
}
}
public class Alpha extends Base {
public static void main( String[] args ) {
new Alpha();//1
//调用父类无参的构造方法
new Base();//2
}
}
A.Base
B.BaseBase
C.编译失败
D.代码运行但没有输出
E.运行时抛出异常
答案:B
new Alpha();//调用Alpha不带参数的构造方法,题中没有,则编译器默认生成一个。那么这段代码会调用到父类的Base方法,默认Alpha的时候,会先默认有一个super调用Base的构造方法。则打印出Base.
new Base();//打印出Base
4.以下程序的输出结果为
A.BD
B.DB
C.C
D.编译错误
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");
}
}
答案:D
原因:当子类继承父类的时候,在子类的构造方法中,先要有super来显示的调用父类的构造方法,先来帮助父类构造。此时父类没有提供不带参数的构造方法,所以Derived中要有super(),且再传一个参数。
5.以下程序执行的结果是:
A.ZYXX
B.ZYXY
C.YXYZ
D.XYZX
class X{
Y y=new Y();//1 实例成员
public X(){//2 构造方法
System.out.print("X");
}
}
class Y{
public Y(){//3
System.out.print("Y");
}
}
public class Z extends X{//子类继承父类
Y y=new Y();//4 实例
public Z(){//5 构造
System.out.print("Z");
}
public static void main(String[] args) {
new Z();
}
}
答案:C
原因:继承时有说过会有如下的执行顺序:
- 父类静态代码块优先于子类静态代码块执行,且是最早执行;
- 父类实例代码块和父类构造方法紧接着执行;
- 子类的实例代码块和子类构造方法紧接着再执行;
- 第二次实例化子类对象时,父类和子类的静态代码块都将不会再执行;
所以题中可见,会先执行1,再执行2。即先打印Y在打印X;
接下来在子类中再执行4,最后执行5。即先打印Y在打印Z。
6.以下关于关键字super的描述中,正确的是:
A.super关键字只代表当前对象内部的那一块父类型特征,不包含在子类对象中
B.super关键字不仅可以指代子类的直接父类,还可以直接指代父类的父类
C.子类通过super关键字只能调用父类的方法,而不能调用父类的属性
D.子类通过super关键字只能调用父类的属性,而不能调用父类的方法
答案:A
原因:super只能指代当前的父类,不能指代那么多;
通过super父类的属性、成员方法、变量都可以被调用;
7.在 java 中,一个类可同时定义为许多同名的方法,这些方法的形式参数个数,类型或顺序各不相同,传回的值可能各不相同,这种面向对象的特性称为()
A.隐藏
B.重写
C.重载
D.无此特性
答案:C
原因:题干就是重载的要求。重写要求方法名、参数列表、返回值都要相同。
8.以下说法, 描述错误的是:
A.重载要求两个方法名字相同, 但是参数的类型和个数不同, 不要求返回值类型相同
B.重写要求两个方法名字相同, 同时参数的类型和个数相同, 不要求返回值类型相同
C.重写的方法可以使用 @Override 注解来修饰
D.父类的方法为 private 的时候, 子类方法不能进行重写.
答案:B
9.java 接口的修饰符可以为()
A.private
B.protected
C.final
D.abstract
答案:D
10.在 java 中 , 一个类()
A.可以继承多个类
B.可以实现多个接口
C.在一个程序中只能有一个子类
D.只能实现一个接口
答案:B
原因:A:Java中只能实现单继承;
C:在一个程序中可以有多个子类;
11.public interface IService {String NAME="default";}默认类型等价表示是哪一项:
A.public String NAME="default";
B.public static String NAME="default";
C.public static final String NAME="default";
D.private String NAME="default";
答案:C
原因:题干表示,一个接口里定义了一个NAME,这个NAME默认是public static final修饰
12.下列关于java抽象类的说法哪个正确?
A.某个抽象类的父类是抽象类,则这个子类必须重写父类的所有抽象方法B.接口和抽象类是同一回事
C.可以用抽象类直接去实例化创建对象
D.一个类只能继承一个抽象类
答案:D
原因:A:因为抽象类的父类是抽象类那么子类无须重写父类的所有抽象方法;
B:明显的错;
C:接口和抽象类都不能进行实例化;
D:类只能继承一个,不能继承多个;
13.以下代码输出结果为:
A.BD
B.DB
C.BB
D.DD
E.编译出错
class B {
public int Func() {
System.out.print("B");
return 0;
}
}
class D extends B {
@Override
public int Func() {
System.out.print("D");
return 0;
}
}
public class Test {
public static void main(String[] args) {
B a = new B();
B b = new D();
a.Func();
b.Func();
}
}
答案:A
原因:B a = new B();自己引用自己
B b = new D();父类引用子类对象
a.Func();调用父类自己的Func方法,所以打印B;b.Func();引用了子类D,而子类D中重写了Func方法,所以打印D;