第三讲 Java语言中的面向对象


一、 选择

1、有关类Demo,哪句描述是正确的?
  public class Demo extends Base{
  private int count;
  public Demo(){
   System.out.println("A Demo object has been created");
  }
  protected void addOne() {count++; }
  }

A 当创建一个Demo类的实例对象时,count的值为0。

B 当创建一个Demo类的实例对象时,count的值是不确定的。

C 超类对象中可以包含改变count 值的方法。

D Demo的子类对象可以访问count。

2、当编译和运行下列程序段时,会发生什么?
  class Base {}
  class Sub extends Base {}
  class Sub2 extends Base {}
  public class CEx{
   public static void main(String argv[]){
   Base b = new Base();
   Sub s = (Sub) b;
   }
  }

A 通过编译和并正常运行。

B 编译时出现例外。

C 编译通过,运行时出现例外。

3、如果任何包中的子类都能访问超类中的成员,那么应使用哪个限定词?

A public

B private

C protected

D transient

4、下面的哪个选项是正确的?
  class ExSuper{
   String name;
   String nick_name;
   public ExSuper(String s,String t){
    name = s;
    nick_name = t;
   }
    public String toString(){
     return name;
    }
   }
   public class Example extends ExSuper{
    public Example(String s,String t){
    super(s,t);
    }
    public String toString(){
     return name +"a.k.a"+nick_name;
    }
    public static void main(String args[]){
     ExSuper a = new ExSuper("First","1st");
     ExSuper b = new Example("Second","2nd");
     System.out.println("a is"+a.toString());
     System.out.println("b is"+b.toString());
    }
  }

A 编译时会出现例外。

B 运行结果为:
        a is First
        b is second

C 运行结果为:
        a is First
        b is Secong a.k.a 2nd

D 运行结果为:
        a is First a.k.a 1nd
        b is Second a.k.a 2nd

5、运行下列程序的结果是哪个?
  abstract class MineBase {
   abstract void amethod();
   static int i;
   }

  public class Mine extends MineBase
  {
   public static void main(String argv[]){
    int[] ar = new int[5];
    for(i = 0;i < ar.length;i++)
    System.out.println(ar[i]);
   }
  }

A 打印5个0。

B 编译出错,数组ar[]必须初始化。

C 编译出错, Mine应声明为abstract。

D 出现IndexOutOfBoundes的例外。



二、多项选择

1、下面哪个语句是正确的?

A Object o = new Button("A");

B Button b=new Object("B");

C Panel p = new Frame();

D Frame f = new Panel();

E Panel p = new Panel();

2、指出下列程序的所有错误?
  final class First {
   private int a = 1;
   int b = 2;
  }

  class Second extends First {
   public void method() {
    System.out.println(a + b);
   }
  }

A println()参数应为字符串,因此此处不能调用该方法。

B 因为变量a 是private ,所以在其他类中不能访问a。

C Second 不能继承First。

D 关键字final不能修饰类。

3、接口A的定义如下,指出下列哪些类实现了该接口?
  interface A {
   int method1(int i);
   int method2(int j);
  }

A class B implements A {
    int method1() { }
    int method2() {
    }
   }

B class B {
    int method1(int i) { }
    int method2(int j) { }
   }

C class B implements A {
    int method1(int i) { }
    int method2(int j) { }
   }

D class B extends A {
    int method1(int i) { }
    int method2(int j) { }
   }

E class B implements A {
    int method2(int j) { }
    int method1(int i) { }
   }

三、 编程题


1、 为某研究所编写一个通用程序,用来计算每一种交通工具运行1000公里所需的时间,已知每种交通工具的参数都是3个整数A、B、C的表达式。现有两种工具:Car007 和Plane,其中Car007 的速度运算公式为:A*B/C,Plane 的速度运算公式为:A+B+C。需要编写三类:ComputeTime.java,Plane.java,Car007.java和接口Common.java,要求在未来如果增加第3种交通工具的时候,不必修改以前的任何程序,只需要编写新的交通工具的程序。其运行过程如下,从命令行输入ComputeTime的四个参数,第一个是交通工具的类型,第二、三、四个参数分别时整数A、B、C,举例如下:
  计算Plane的时间:"java ComputeTime Plane 20 30 40"
  计算Car007的时间:"java ComputeTime Car007 23 34 45"
  如果第3种交通工具为Ship,则只需要编写Ship.java,运行时输入:"java ComputeTime Ship 22 33 44"
  提示:充分利用接口的概念,接口对象充当参数。
  实例化一个对象的另外一种办法:Class.forName(str).newInstance();例如需要实例化一个Plane对象的话,则只要调用Class.forName("Plane").newInstance()便可。