1、关于用abstract定义的类,下列说法中正确的是:
A.可以被实例化 B.不能够派生子类 C.不能被继承 D.只能被继承
答案:
父类中的某些方法不包含任何逻辑,并且需要由子类重写,在这种情况下,应该使用关键字abstract来声明父类中的方法,子类提供对这种abstract方法的实现细节。而父类仅提供此方法的名称和声明,没有方法的主体,因此子类应该负责重写此方法。
任何包含一个或多个抽象方法的类也应该声明为抽象。要声明一个抽象类,在class关键字前应该加上关键字abstract。抽象类不能被实例化,构造方法和static 方法不能被声明为abstact。abstract类的任何子类必须实现父类中声明的所有abstract方法,否则子类必须声明为抽象类。
abstract类不能有对象,但他们可以用来创建对象引用,因为java运行时多态性是通过类引用实现的。因此,对象可以来创建对抽象类的引用,抽象类可以指向子类的对象。
2、当类成员未使用修饰符修饰时,Java认为该成员的访问权限是:
A.public B.friendly C.protected D.privare
答案:
起始严格来讲是没有答案的 friendly不用于Java 它属于c++术语。对于一个Class的成员变量或成员函数,如果不用public, protected, private中的任何一个修饰,那么该成员获得“默认访问控制”级别,即package access (包访问)。
属于package access的成员可以被同一个包中的其他类访问,但不能被其他包的类访问。
包访问的控制力弱于private,但强于protected。因为一方面,只要是子类,不管子类与父类是否位于同一个包中,那么子类都可以访问父类中的protected方法。但是一旦位于原类的包外,不管是否是其子类,都无法访问其属于package access级别的成员。而另一方面,一个类可以访问同一个包中另一个类的package access成员,同时也能访问其protected成员。
(注:package是Java中的关键字,虽然包访问也是一种访问控制级别,但关键字”package”只能用来表示类属于哪个包,而不能像”private”,”public”那样放到成员变量或函数前面,作为访问控制修饰符。)
访问级别保护的强度:public<protected<默认<private
3、在面向对象的语言中, 以下描述错误的包括(B ) 。
A.类的实例化是指对类的实例分配存储空间
B.每个类都必须创建一个实例
C.每个类只能创建一个实例
D.类的实例化是指对类进行初始化
答案:B。因为抽象类不能创建实例,只能被继承
4、有以下方法的定义,请选择该方法的返回类型(b d)。
ReturnType method(byte x, double y) {
return (short)x/y*2;
}
A、byte B、short C、int D、double
答案:D。先转换,再除,再乘。
5、阅读以下代码:
import java.io.*;
import java.util.*;
public class foo{
public static void main (String[] args){
String s;
System.out.println("s=" + s);
}
}
输出结果应该是:(c)
A、代码得到编译,并输出“s=”
B、代码得到编译,并输出“s=null”
C、由于String s没有初始化,代码不能编译通过
D、代码得到编译,但捕获到 NullPointException异常
6、编译运行以下程序后,关于输出结果的说明正确的是 (c)
public class Conditional{
public static void main(String args[ ]){
int x=4;
System.out.println(“value is “+ ((x>4) ? 99.9:9));
}
}
A、输出结果为:value is 99.9 B、输出结果为:value is 9
C、输出结果为:value is 9.0
7、指出下列程序运行的结果 ( b)
public class Example{
String str=new String("good");
char[] ch = {'a','b','c'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
Sytem.out.print(ex.ch);
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}
A、 good and abc
B、 good and gbc
C、 test ok and abc
D、 test ok and gbc
8、给出下面代码段, 哪行将引起一个编译时错误?( d)
1.public class Test {
2. int n = 0;
3. int m = 0;
4. public Test(int a) { m=a; }
5. public static void main(String arg[]) {
6. Test t1,t2;
7. int j,k;
8. j=3; k=5;
9. t1=new Test();
10. t2=new Test(k);
11. }
12.}
A、 行1 B、 行4 C、行6 D、行9
9、选项中哪一行代码可以替换题目中//add code here而不产生编译错误?(a )
public abstract class MyClass {
public int constInt = 5;
//add code here
public void method() {
}
}
A、public abstract void method(int a);
B、value = value + 5;
C、public int method();
D、public abstract void anotherMethod() {}
10、下面是People和Child类的定义和构造方法,每个构造方法都输出编号。在执行new Child("mike")的时候都有哪些构造方法被顺序调用?请选择输出结果(d )
class People {
String name;
public People() { System.out.print(1); }
public People(String name) {
System.out.print(2);
this.name = name;
}
}
class Child extends People {
People father;
public Child(String name) {
System.out.print(3);
this.name = name;
father = new People(name + ":F");
}
public Child(){ System.out.print(4); }
}
A、312 B、32
C、432 D、132
11、以下程序编译不通过
class People {
String name;
//public People() { System.out.print(1); }
public People(String name) {
System.out.print(2);
this.name = name;
}
}
class Child extends People {
People father;
public Child(String name) {
System.out.print(3);
this.name = name;
father = new People(name + ":F");
}
}