1、下列说法正确的是
A .使用extends关键字定义一个类的子类。
B .Java与C++类似,支持多继承,即子类可以有一个或多个父类。
C .Object是所有类的祖先类。
D .如果子类继承父类的成员变量作为自己的一个成员变量,则该成员变量可以被子类中自己定义的任何实例方法操作。
答案:ACD
解析:P112-113。
2、下列说法错误的是
A .继承的成员变量或方法的访问权限可以由子类重新定义。
B .若子类和父类不在同一包,子类只继承父类中的protected和public访问权限的方法作为子类的方法。
C .继承关系的UML类图用一个实线连接两个类,起始端是子类,重点端是父类,终点端使用空心三角形表示实线的结束。
D .如果在类本身创建一个对象,则该对象不可以通过“.”运算符访问继承的protected变量。
答案:AD
解析:5.2节。A项:继承后访问权限保持不变。
3、如果子类和父类不在同一包中,子类不继承父类的友好成员变量。
A .true
B .false
答案:A
解析:P116。
4、instanceof主要用来判断一个类是否实现了某个接口,或者判断一个实例对象是否属于一个类。
A .true
B .false
答案:A
解析:P117。
5、下列关于Override的说法,正确的是
A .子类所声明的成员变量的名字和从父类继承来的成员变量名字相同但类型不同时,子类会隐藏所继承的成员变量。
B .除了继承的方法之外,子类新定义的方法可以操作子类继承的成员变量。
C .子类重写的方法,方法名字、参数个数、参数类型和父类的方法完全相同。
D .重写方法可以操作被子类隐藏的成员变量和方法。
答案:ABC
解析:5.4节。
6、子类在重写可以继承的方法时,可以完全按照自己的意图编写新的方法体。重写方法的类型可以是父类方法类型的子类型,不必完全一致。
A .true
B .false
答案:A
解析:P121。
7、某方法在父类的访问权限是public,则子类重写时级别可以是protected。
A .true
B .false
答案:B
解析:P122。子类不允许降低方法的访问权限,但可以提高访问权限。
8、下列关于super关键字的说法,正确的是
A .如果在子类中想使用被子类隐藏的成员变量或方法,就需要使用关键字super。
B .课本P123代码Example5_7.java中,Average类g()方法里“c=super.f()”调用的是Average类的float f()。
C .子类的构造方法如果没有明显地指明使用父类的哪个构造方法,子类就调用父类的不带参数的构造方法。
D .P124的程序Example5_8,如果UniverStudent子类地构造方法中省略super,则程序默认执行Student类的super()。
答案:ACD
9、下列关于final关键字的说法,正确的是
A .final类不能被继承。
B .String类为final类。
C .父类的final方法子类不能重写。
D .final修饰的变量不允许被再次赋值。
答案:ABCD
10、对象的上转型对象再强制转换为一个子类对象时,该子类对象又具备了子类所有的属性和功能。
A .true
B .false
答案:A
解析:P127。
11、下列说法正确的是
A .父类创建的对象的引用可以赋值给子类声明的对象。
B .上转型对象不能访问子类隐藏的成员变量。
C .上转型对象不能操作子类新增的成员变量。
D .子类对象的上转型对象可以调用子类重写的静态方法。
答案:C
12、父类中有个public void fight(),子类中有个public void fight( Weapon w),这两个方法的关系是Override.
A .true
B .false
答案:B
解析:子类重写的方法,方法名字、参数个数、参数类型和父类的方法完全相同。这里是重载。
13、public void someMethod(int i)和public int someMethod()是方法重载。
A .true
B .false
答案:A
14、继承是指父类的某个方法被其子类重写时,可以产生自己的行为和功能。
A .true
B .false
答案:B
解析:这是多态的定义,而非继承。
15、下列关于abstract关键字的说法,正确的是
A .可以使用static修饰abstract方法。
B .非abstract类中不可以有abstract方法。
C .不能使用new创建abstract类的对象。
D .不允许使用final和abstract同时修饰一个方法.
E .可以使用public abstract void eat(){};来声明抽象方法eat()。
F .抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写此抽象方法。
答案:BCDF
解析:5.9节。A项:abstract关键字不能应用于static、private或final 方法。E项:不能有方法体。
16、下列说法正确的是
A .子类继承父类的构造方法。
B .abstract类的子类必须是非abstract类。
C .子类继承的方法只能操作子类继承和隐藏的成员变量。
D .子类重写或新增的方法也能直接操作被子类隐藏的成员变量。
答案:C
17、下列注释的哪些代码(A、B、C、D)无法通过编译?
class Father {
private int money =12;
float height;
int seeMoney(){
return money ; //A
}
}
class Son extends Father {
int height;
int lookMoney() {
int m = seeMoney(); //B
return m;
}
}
class E {
public static void main(String args[]) {
Son erzi = new Son();
erzi.money = 300; //C
erzi.height = 1.78F; //D
}
}
A .A
B .B
C .C
D .D
答案:CD
18、下列注释的哪个代码(A、B、C、D)无法通过编译?
class A {
static int m;
void f(){
m = 20 ; //A
}
}
class B extends A {
void f() //B
{ m = 222 ; //C
}
}
class E {
public static void main(String args[]) {
A.f(); // D
}
}
A .A
B .B
C .C
D .D
答案:D
19、下列代码中标注的(A,B,C,D)中,哪一个是错误的?
abstract class Takecare {
protected void speakHello() {} //A
public abstract static void cry(); //B
static int f()
{ return 0 ;} //C
abstract float g(); //D
}
A .A
B .B
C .C
D .D
答案:B
20、下列注释的哪个代码(A、B、C、D)无法通过编译?
abstract class A {
abstract float getFloat (); //A
void f() //B
{ }
}
public class B extends A {
private float m = 1.0f; //C
private float getFloat () //D
{ return m;
}
}
A .A
B .B
C .C
D .D
答案:D
21、将下列哪个代码(A,B,C,D)放入程序中标注的【代码】处将导致编译错误?
class A {
public float getNum() {
return 3.0f;
}
}
public class B extends A {
【代码】
}
A .public float getNum(){return 4.0f;}
B .public void getNum(){ }
C .public void getNum(double d){ }
D .public double getNum(float d){return 4.0d;}
答案:B
22、对于下列代码,下列哪个叙述是正确的?
class A {
public int i=0;
A(int m) {
i = 1;
}
}
public class B extends A {
B(int m) {
i = 2;
}
public static void main(String args[]){
B b = new B(100);
System.out.println(b.i); //【代码】
}
}
A .程序提示编译错误(原因是A类没有不带参数的构造方法)
B .编译无错误,【代码】输出结果是0。
C .编译无错误,【代码】输出结果是1。
D .编译无错误,【代码】输出结果是2。
答案:A
(说明:P是书上页码,详情请看书)