错题分析
请看如下代码
class Person {
private int a;
public int change(int m){return m;}
}
public class Teacher extends Person{
public int b;
public static void main(String arg[]){
Person p = new Person();
Teacher t = new Teacher();
int i;
// point x
}
}
下面哪些放在// point x行是正确的?
A. i = b;
B. i = p.a;
C. i = t.change(30);
D. i = t.a;
正确选项:C
我的答案:D
错误分析:
D选项的t.a中的是被private修饰的,所以即使是通过对象去调用,也是无法正常调用,需要使用到get和set方法才能访问到。过于粗心的容易忽略属性的修饰符,从而导致不能做出正确的判断。
以下代码中的输出结果是( )
public class Something{
public static void main(String[] args){
Other o=new Other();
new Something().addOne(o);
System.out.println(o.i);
}
public void addOne( Other o){
o.i++;
o = new Other();
o.i++;
}
}
A 1
B 2
C 0
D 编译错误
正确选项:A
我的答案:D
错误分析:
对new关键字和链式编程的理解不够,看到new Something().addOne(o);这段代码就下意识的认为构造方法后不能调用方法。
以下选项可替换题目中//add code here而不产生编译错误的是( )。(选择二项)
public abstract class MyClass{
public int constInt=5;
//add code here
public void method( ){
}
}
A public abstract void method(int a);
B constInt =constInt+5;
C public int method( );
D public abstract void anotherMethod( );
正确选项:A D
我的答案:B D
错误分析:
对变量的理解有点小问题,变量是无法直接在类中直接使用,这对变量的操作应该在方法体或者代码块中。
使用final修饰的变量将变成常量,其中不能再被改变;使用final修饰的方法将无法被子类重载;使用final修饰的类将无法再被其他类继承。( 对 )
错误分析:
重载:在同一个类中,如果定义了多个方法名相同,但是可以通过参数进行区分的方法,那么这些方法就可以称之为重载,也就说就算不被final修饰,子类和父类的关系也不是重载。(题目有点小问题,重载应该是重写)
抽象方法不能含有方法体,并且必须定义在抽象类中。( 对 )
错误分析:
对接口的理解有误,认为接口和抽象类是不同的,不清楚接口也属于抽象类。