选择题

1、(单选题)下列关于 interface 的说法正确的是( )
A.interface 中可以有 private 方法
B.interface 中可以有 final 方法
C.interface 中可以有 function 实现
D.interface 可以继承其他 interface
【正确答案】D
【答案解析】A. 接口中不可以有 private 的方法。B.接口中不可以有 final 的方法 接口中的方法默认是 public abstract 的。C.接口中的方法不可以有实现

2、(单选题)java7版本以前,下列有关接口的叙述错误的是哪项?()
A.接口中只能包含抽象方法和常量
B.一个类可以实现多个接口
C.非抽象的类实现接口时必须实现其中的所有抽象方法
D.类可以继承接口
【正确答案】D
【答案解析】java8以前,接口只能被类实现,类不能继承接口,遵循单继承多实现原则。java8以后,接口中可以包含静态方法和默认方法

3、(单选题)已知类 Teacher 和 Student 都是类 Person 的子类,则对于下列代码说法正确的是( )
Person t = new Teacher();
if (t instanceof Teacher){
Student s = (Student)t;
}
A.将构造一个 Student 对象
B.将构造一个 Teacher 对象
C.编译出错,且运行时出错
D.编译正确,且运行时出错
【正确答案】D
【答案解析】instanceof 是 Java 的一个二元操作符,它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 类型的数据。Teahcer 和 Student 之间没有继承关系不能做强制类型转换

4、(单选题)栈是一种( )
A.存取受限的线性结构
B.存取不受限的线性结构
C.存取受限的非线性结构
D.存取不受限的非线性结构
【正确答案】A
【答案解析】栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线性表。

5、(单选题)下列哪些语句关于内存回收的说明是正确的( )
A.程序员必须创建一个线程来释放内存
B.内存回收程序负责释放无用内存
C.内存回收程序允许程序员直接释放内存
D.内存回收程序可以在指定的时间释放内存对象
【正确答案】B
【答案解析】垃圾收集器在一个 Java 程序中的执行是自动的,不能强制执行,即使程序员能明确地判断出有一块内存已经无用了,是应该回收的,程序员也不能强制垃圾收集器回收该内存块。程序员唯一能做的就是通过调用 System.gc()方法来"建议"垃圾收集器去进行垃圾回收处理,但其是否可以执行,什么时候执行却都是不可知的。

6、(单选题)为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为()
A.static void method( )
B.public void method( )
C.final void method( )
D.abstract void method( )
【正确答案】A
【答案解析】1、public修饰的方法可被其它类访问或引用。 2、abstract修饰的方法是抽象方法,抽象方法没有方法体,要使用抽象方法,必须先实现此抽象方法。 3、final修饰的方法不能被继承。 4、static修饰的方法为静态方法,静态方法不需要类的实例化就可以被类直接调用。 故要使得类名AB可以直接调用method()方法,则必须在method()前用static来修饰。

7、(单选题)下列说法正确的有( )
A.class 中的 constructor 不可省略
B.constructor 必须与 class 同名,但方法不能与 class 同名
C.constructor 在一个对象被 new 时执行
D.一个 class 只能定义一个 constructor
【正确答案】C
【答案解析】构造方法的作用是在实例化对象的时候给属性成员进行初始化。 A.类中如 果没有显示的给出构造方法,系统会提供一个无参构造方法。 B.构造方法 与类同名,类中可以有和类名相同的方法。 D.构造方法可以重载。

8、(单选题)以下哪个约束符可用于定义成员常量( )
A、static
B、final
C、abstract
D、No modifier can be used
【正确答案】B
【答案解析】static 静态成员变量(在定义这个变量的类的实例中,
这个变量是唯一的,即多个实例间这个变量为共享的)
abstract不能修饰变量
final 成员常量(必须在定义时或在构造方法中赋初值)
final static 静态成员常量,必须在定义这个常量时给定其初始化值

简答题:

1、简述面向对象的特性及理解
封装:封装把⼀个对象的属性私有化,同时提供⼀些可以被外界访问的属性的⽅法,如果属性不想被外界访问,我们⼤可不必提供⽅法给外界访问。但是如果⼀个类没有提供给外界访问的⽅法,那么这个类也没有什么意义了。
继承:继承是使⽤已存在的类的定义作为基础建⽴新类的技术,新类的定义可以增加新的数据或新的功能,也可以⽤⽗类的功能,但不能选择性地继承⽗类。通过使⽤继承我们能够⾮常⽅便地复⽤以前的代码。
多态:就是指程序中定义的引⽤变量所指向的具体类型和通过该引⽤变量发出的⽅法调⽤在编程时并不确定,⽽是在程序运⾏期间才确定,即⼀个引⽤变量到底会指向哪个类的实例对象,该引⽤变量发出的⽅法调⽤到底是哪个类中实现的⽅法,必须在由程序运⾏期间才能决定。

2、Java中接口和抽象类的区别
答:Java提供和支持创建抽象类的接口,它们的实现有共同点,不同点在于:
接口中所有的方法隐含的都是抽象的,而抽象类则可以同时包含抽象方法和非抽象方法。
类可以实现多个接口,但是只能继承一个抽象类。
类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法;当然在这种情况下,类也必须声明是抽象的。
抽象类可以在不提供接口方法实现的情况下实现接口。
Java接口中声明的变量默认是final的,抽象类可以包含非final的变量。
Java接口中的成员函数默认是public的,抽象类的成员函数可以是private、protected或public。
接口是绝对抽象的,不可以被实例化,抽象类也不可以被实例化,但是如果它包含main方法的话,是可以被调用的。

程序题:

(1)编写一个圆类Circle,该类拥有:
①一个成员变量
Radius(私有,浮点型); // 存放圆的半径;
②两个构造方法
Circle( ) // 将半径设为0
Circle(double r ) //创建Circle对象时将半径初始化为r
③ 三个成员方法
double getArea( ) //获取圆的面积
double getPerimeter( ) //获取圆的周长
void show( ) //将圆的半径、周长、面积输出到屏幕
(2)编写一个圆柱体类Cylinder,它继承于上面的Circle类。还拥有:
①一个成员变量
double hight(私有,浮点型); // 圆柱体的高;
②构造方法
Cylinder (double r, double h ) //创建Circle对象时将半径初始化为r
③ 成员方法
double getVolume( ) //获取圆柱体的体积
void showVolume( ) //将圆柱体的体积输出到屏幕
编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积。

class Circle {                      //定义父类--圆类
private double radius;          //成员变量--圆半径
Circle() {                      //构造方法
radius=0.0;
}
Circle(double r) {              //构造方法
radius=r;
}
double getPerimeter() {         //成员方法--求圆周长
return 2*Math.PI*radius;
}
double getArea() {              //成员方法--求圆面积
return Math.PI*radius*radius;
}
void disp() {                   //成员方法--显示圆半径、周长、面积
System.out.println("圆半径="+radius);
System.out.println("圆周长="+getPerimeter());
System.out.println("圆面积="+getArea());
}
}
class Cylinder extends Circle {     //定义子类--圆柱类
private double hight;           //成员变量--园柱高
Cylinder(double r,double h) {   //构造方法
super(r);
hight=h;
}
public double getVol() {        //成员方法--求园柱体积
return getArea()*hight;
}
public void dispVol() {         //成员方法--显示园柱体积
System.out.println("圆柱体积="+getVol());
}
}
public class TestCylinder {         //定义主类
public static void main(String[] args) {    //主程入口
    Circle Ci=new Circle(10.0); // 生成园类实例
    Ci.disp(); // 调用园类的方法
        Cylinder Cyl=new Cylinder(5.0,10.0);    //生成圆柱类实例
        Cyl.disp();                             //调用父类方法
        Cyl.dispVol();                          //调用子类方法
    }
}