1、选择题
1、 (单选题)
下列程序中注释的哪个代码(1、2、3、4)是错误的(无法通过编译)? class A { static int m; static void f(){ m = 20 ; //1 } } class B extends A { void f() //2 { m = 222 ; //3 } } class E { public static void main(String args[]) { A.f(); // 4 } }
- A. 1
- B. 2
- C. 3
- D. 4
正确答案:B 静态方法不能被子类重写
2 (单选题)
假设C是B的子类,B是A的子类,cat是C类的一个对象,bird是B类的一个对象,下列哪个叙述是错误的?
- A. cat instanceof B的值是true。
- B.
bird instanceof A的值是true。
- C. cat instanceof A的值是true。
- D. bird instanceof C的值是true。
正确答案:B
instanceof
是一个在面向对象编程中常用的操作符,用于检查一个对象是否是指定类或其子类的实例。在 Java 中,语法为 object instanceof ClassName
,其中 object
是要检查的对象,ClassName
是要检查的类名或接口名。
如果 object
是 ClassName
类的一个实例,或者 ClassName
的子类的实例,则 object instanceof ClassName
的结果为 true
;否则结果为 false
3、下列程序中注释的哪个代码(1、2、3、4)是错误的(无法通过编译)? abstract class A { abstract float getFloat (); //1 void f() //2 { } } public class B extends A { private float m = 1.0f; //3 private float getFloat () //4 { return m; } }
- A. 1
- B. 2
- C. 3
- D. 4
正确答案 D
选项 D 中的 4 是错误的。
在 Java 中,当一个类继承了一个抽象类,并且重写了其中的抽象方法时,重写的方法必须与父类中的抽象方法具有更大的访问权限和相同返回类型,但可以有不同的方法体。在选项 D 中,子类 B 中的 getFloat()
方法试图重写父类 A 中的抽象方法 getFloat()
,但是它的访问修饰符是 private,而不是 public,这会导致编译错误。Java 中的默认访问修饰符是包级别的,而不是 protected
。protected
访问修饰符允许子类访问其父类的成员,以及同一包中的其他类访问这些成员。与之相比,包级别的访问修饰符只允许同一包中的其他类访问成员,而不允许子类访问。
4、对于下列代码,下列哪个叙述是正确的?
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 在Java中,如果子类的构造函数没有显式地调用父类的构造函数(使用super(...)
),那么编译器会尝试调用父类的默认无参构造函数。但是,如果父类没有默认无参构造函数,而只有有参构造函数,而子类又没有显式地调用父类的有参构造函数,那么就会导致编译错误。这正是这道题目中的情况,因为父类A有一个有参构造函数,所以编译器不会提供默认的无参构造函数,而子类B又没有显式地调用父类A的构造函数,因此会导致编译错误。
5 (多选题)
下列程序中注释的哪两个代码(1、2、3、4)是错误的(无法通过编译)? class Father { private int money =12; float height; int seeMoney(){ return money ; //1 } } class Son extends Father { int height; int lookMoney() { int m = seeMoney(); //2 return m; } } class E { public static void main(String args[]) { Son erzi = new Son(); erzi.money = 300; //3 erzi.height = 1.78F; //4 } }
- A. 1
- B. 2
- C. 3
- D. 4
正确答案: CD
2、判断题
1、 (判断题)
可以用final修饰构造方法。
- A. 对
- B. 错
正确答案:错
子类在方法重写时,不可以把父类的实例方法重写为类(static)方法,也不可以把父类的类(static)方法重写为实例方法。
- A. 对
- B. 错
正确答案:对