Introduction to Java Programming, Seventh Edition, Y. Daniel Liang
Chapter 11 Abstract Classes and Interfaces
Section 11.2 Abstract Classes
1
Which of the following class definitions defines a legal abstract class?
A.
class A { abstract void unfinished() { } }
B.
class A { abstract void unfinished(); }
C.
abstract class A { abstract void unfinished(); }
D.
public class abstract A { abstract void unfinished(); }
2
Which of the following declares an abstract method in an abstract Java class?
A.
public abstract method();
B.
public abstract void method();
C.
public void abstract Method();
D.
public void method() {}
E.
public abstract void method() {}
3
Which of the following statements regarding abstract methods are true?
A.
An abstract class can have instances created using the constructor of the abstract class.
B.
An abstract class can be extended.
C.
A subclass of a non-abstract superclass can be abstract.
D.
A subclass can override a concrete method in a superclass to declare it abstract.
E.
An abstract class can be used as a data type.
4
Which of the following statements regarding abstract methods are true?
A.
Abstract classes have constructors.
B.
A class that contains abstract methods must be abstract.
C.
It is possible to declare an abstract class that contains no abstract methods.
D.
An abstract method cannot be contained in a nonabstract class.
E.
A data field can be declared abstract.
5
Suppose A is an abstract class, B is a concrete subclass of A, and both A and B have a default constructor. Which of the following is correct?
A.
A a = new A();
B.
A a = new B();
C.
B b = new A();
D.
B b = new B();
6
What is the output of running class Test?
public class Test {
   public static void main(String[] args) {
     new Circle9();
   }
}
public abstract class GeometricObject {
   protected GeometricObject() {
     System.out.print("A");
   }
   protected GeometricObject(String color, boolean filled) {
     System.out.print("B");
   }
}
public class Circle9 extends GeometricObject {
   /** Default constructor */
   public Circle9() {
     this(1.0);
     System.out.print("C");
   }
   /** Construct circle with a specified radius */
   public Circle9(double radius) {
     this(radius, "white", false);
     System.out.print("D");
   }
   /** Construct a circle with specified radius, filled, and color */
   public Circle9(double radius, String color, boolean filled) {
     super(color, filled);
     System.out.print("E");
   }
}
A.
ABCD
B.
BACD
C.
CBAE
D.
AEDC
E.
BEDC
Section 11.3 Example: Calendar and GregorianCalendar
7
The java.util.Calendar and java.util.GregorianCalendar classes are introduced in Chapter 11. Analyze the following code.
1. import java.util.*;
2. public class Test {
3. public static void main(String[] args) {
4. Calendar[] calendars = new Calendar[10];
5. calendars[0] = new Calendar();
6. calendars[1] = new GregorianCalendar();
7. }
8. }
A.
The program has a compile error on Line 4 because java.util.Calendar is an abstract class.
B.
The program has a compile error on Line 5 because java.util.Calendar is an abstract class.
C.
The program has a compile error on Line 6 because Calendar[1] is not of a GregorianCalendar type.
D.
The program has no compile errors.
8
Assume Calendar calendar = new GregorianCalendar(). __________ returns the month of the year.
A.
calendar.get(Calendar.MONTH)
B.
calendar.get(Calendar.MONTH_OF_YEAR)
C.
calendar.get(Calendar.WEEK_OF_MONTH)
D.
calendar.get(Calendar.WEEK_OF_YEAR)
9
Assume Calendar calendar = new GregorianCalendar(). __________ returns the week of the year.
A.
calendar.get(Calendar.MONTH)
B.
calendar.get(Calendar.MONTH_OF_YEAR)
C.
calendar.get(Calendar.WEEK_OF_MONTH)
D.
calendar.get(Calendar.WEEK_OF_YEAR)
10
Assume Calendar calendar = new GregorianCalendar(). __________ returns the number of days in a month.
A.
calendar.get(Calendar.MONTH)
B.
calendar.get(Calendar.MONTH_OF_YEAR)
C.
calendar.get(Calendar.WEEK_OF_MONTH)
D.
calendar.get(Calendar.WEEK_OF_YEAR)
E.
calendar.getActualMaximum(Calendar.DAY_OF_MONTH)
Sections 11.4-11.8
11
Which of the following is a correct interface?
A.
interface A { void print() { }; }
B.
abstract interface A { print(); }
C.
abstract interface A { abstract void print() { };}
D.
interface A { void print();}
12
Show the output of running the class Test in the following code lines:
interface A {
}
class C {
}
class B extends D implements A {
}
public class Test extends Thread {
   public static void main(String[] args) {
     B b = new B();
     if (b instanceof A)
       System.out.println("b is an instance of A");
     if (b instanceof C)
       System.out.println("b is an instance of C");
   }
}
class D extends C {
}
    
A.
Nothing.
B.
b is an instance of A.
C.
b is an instance of C.
D.
b is an instance of A followed by b is an instance of C.
13
The java.lang.Comparable interface is introduced in Chapter 11. Analyze the following code:
public class Test1 {
   public Object max(Object o1, Object o2) {
     if ((Comparable)o1.compareTo(o2) >= 0) {
       return o1;
     }
     else {
       return o2;
     }
   }
}
A.
The program has a compile error because Test1 does not have a main method.
B.
The program has a compile error because o1 is an Object instance and it does not have the compareTo method.
C.
The program has a compile error because you cannot cast an Object instance o1 into Comparable.
D.
The program would compile if ((Comparable)o1.compareTo(o2) >= 0) is replaced by (((Comparable)o1).compareTo(o2) >= 0).
14
Suppose A is an interface, B is a concrete class with a default constructor that implements A. Which of the following is correct?
A.
A a = new A();
B.
A a = new B();
C.
B b = new A();
D.
B b = new B();
15
The java.lang.Cloneable interface is introduced in Chapter 11. Analyze the following code.
public class Test {
   public static void main(String[] args) {
     java.util.Date x = new java.util.Date();
     java.util.Date y = x.clone();
     System.out.println(x = y);
   }
}
A.
A java.util.Date object is not cloneable.
B.
x = y in System.out.println(x = y) causes a compile error because you cannot have an assignment statement inside a statement.
C.
x = y in System.out.println(x = y) causes a runtime error because you cannot have an assignment statement inside a statement.
D.
The program has a compile error because the return type of the clone() method is java.lang.Object.
16
The printout from the following code is __________.
java.util.ArrayList list = new java.util.ArrayList();
list.add("New York");
java.util.ArrayList list1 = (java.util.ArrayList)(list.clone());
list.add("Atlanta");
list1.add("Dallas");
System.out.println(list1);
A.
[New York]
B.
[New York, Atlanta]
C.
[New York, Atlanta, Dallas]
D.
[New York, Dallas]
17
The printout from the following code is __________.
java.util.ArrayList list = new java.util.ArrayList();
list.add("New York");
java.util.ArrayList list1 = list;
list.add("Atlanta");
list1.add("Dallas");
System.out.println(list1);
A.
[New York]
B.
[New York, Atlanta]
C.
[New York, Atlanta, Dallas]
D.
[New York, Dallas]
18
The GeometricObject and Circle classes are defined in Chapter 11. Analyze the following code.
public class Test {
   public static void main(String[] args) {
     GeometricObject x = new Circle(3);
     GeometricObject y = (Circle)(x.clone());
     System.out.println(x);
     System.out.println(y);
   }
}
A.
The program has a compile error because the clone() method is protected in the Object class.
B.
After you override the clone() method and make it public in the Circle class, the problem can compile and run just fine, but y is null if Circle does not implement the Cloneable interface.
C.
To enable a Circle object to be cloned, the Circle class has to override the clone() method and implement the java.lang.Cloneable interface.
D.
If GeometricObject implements Cloneable and Circle overrides the clone() method, the clone() method will work fine to clone Circle objects.
19
Analyze the following code.
1. public class Test {
2. public static void main(String[] args) {
3. Fruit[] fruits = {new Fruit(2), new Fruit(3), new Fruit(1)};
4. java.util.Arrays.sort(fruits);
5. }
6. }
class Fruit {
   private double weight;
  
   public Fruit(double weight) {
     this.weight = weight;
   }
}
A.
The program has a compile error because the Fruit class does not have a default constructor.
B.
The program has a runtime error on Line 3 because the Fruit class does not have a default constructor.
C.
The program has a compile error on Line 4 because the Fruit class does not implement the java.lang.Comparable interface and the Fruit objects are not comparable.
D.
The program has a runtime error on Line 4 because the Fruit class does not implement the java.lang.Comparable interface and the Fruit objects are not comparable.
Section 11.9 Processing Primitive Data Type Values as Objects
20
Which of the following statements will convert a string s into i of int type?
A.
i = Integer.parseInt(s);
B.
i = (new Integer(s)).intValue();
C.
i = Integer.valueOf(s).intValue();
D.
i = Integer.valueOf(s);
E.
i = (int)(Double.parseDouble(s));
21
Which of the following statements will convert a string s into a double value d?
A.
d = Double.parseDouble(s);
B.
d = (new Double(s)).doubleValue();
C.
d = Double.valueOf(s).doubleValue();
D.
All of the above.
22
Which of the following statements convert a double value d into a string s?
A.
s = (new Double(d)).toString();
B.
s = (Double.valueOf(s)).toString();
C.
s = new Double(d).stringOf();
D.
s = String.stringOf(d);
23
The java.lang.Number and its subclasses are introduced in Chapter 11. Analyze the following code.
     Number numberRef = new Integer(0);
     Double doubleRef = (Double)numberRef;
A.
There is no such class named Integer. You should use the class Int.
B.
The compiler detects that numberRef is not an instance of Double.
C.
A runtime class casting exception occurs, since numberRef is not an instance of Double.
D.
The program runs fine, since Integer is a subclass of Double.
E.
You can convert an int to double, so you can cast an Integer instance to a Double instance.
24
Analyze the following code.
     Number[] numberArray = new Integer[2];
     numberArray[0] = new Double(1.5);
A.
You cannot use Number as a data type since it is an abstract class.
B.
Since each element of numberArray is of the Number type, you cannot assign an Integer object to it.
C.
Since each element of numberArray is of the Number type, you cannot assign a Double object to it.
D.
At runtime, new Integer[2] is assigned to numberArray. This makes each element of numberArray an Integer object. So you cannot assign a Double object to it.
25
Analyze the following code.
public class Test {
   public static void main(String[] args) {
     Number x = new Integer(3);
     System.out.println(x.intValue());
     System.out.println(x.compareTo(new Integer(4)));
   }
}
A.
The program has a compile error because an Integer instance cannot be assigned to a Number variable.
B.
The program has a compile error because intValue is an abstract method in Number.
C.
The program has a compile error because x does not have the compareTo method.
D.
The program compiles and runs fine.
26
Analyze the following code.
public class Test {
   public static void main(String[] args) {
     Number x = new Integer(3);
     System.out.println(x.intValue());
     System.out.println((Integer)x.compareTo(new Integer(4)));
   }
}
A.
The program has a compile error because an Integer instance cannot be assigned to a Number variable.
B.
The program has a compile error because intValue is an abstract method in Number.
C.
The program has a compile error because x cannot be cast into Integer.
D.
The program has a compile error because the member access operator (.) is executed before the casting operator.
E.
The program compiles and runs fine.
27
Which of the following statements is correct?
A.
Integer.parseInt("12", 2);
B.
Integer.parseInt(100);
C.
Integer.parseInt("100");
D.
Integer.parseInt(100, 16);
E.
Integer.parseInt("345", 8);
28
What is the output of Integer.parseInt("10", 2)?
A.
1;
B.
2;
C.
10;
D.
Invalid statement;
29
Which of the following statements are correct?
A.
new java.math.BigInteger("343");
B.
new java.math.BigDecimal("343.445");
C.
new java.math.BigInteger(343);
D.
new java.math.BigDecimal(343.445);
30
Which of the following classes are immutable?
A.
Integer
B.
Double
C.
BigInteger
D.
BigDecimal
E.
String
31
What is the output of the following code?
public class Test {
   public static void main(String[] args) {
     java.math.BigInteger x = new java.math.BigInteger("3");
     java.math.BigInteger y = new java.math.BigInteger("7");
     x.add(y);
     System.out.println(x);
   }
}
A.
3
B.
4
C.
10
D.
11
Section 11.11 Automatic Conversion Between Primitive Types and Wrapper Class Types (JDK 1.5 Feature)
32
In JDK 1.5, you may directly assign a primitive data type value to a wrapper object. This is called ______________.
A.
auto boxing
B.
auto unboxing
C.
auto conversion
D.
auto casting
33
In JDK 1.5, analyze the following code.
Line 1: Integer[] intArray = {1, 2, 3};
Line 2: int i = intArray[0] + intArray[1];
Line 3: int j = i + intArray[2];
Line 4: double d = intArray[0];
A.
It is OK to assign 1, 2, 3 to an array of Integer objects in JDK 1.5.
B.
It is OK to automatically convert an Integer object to an int value in Line 2.
C.
It is OK to mix an int value with an Integer object in an expression in Line 3.
D.
Line 4 is OK. An int value from intArray[0] object is assigned to a double variable d.
34
Which of the following statements are correct?
A.
Integer i = 4.5;
B.
Double i = 4.5;
C.
Object i = 4.5;
D.
Number i = 4.5;
Section 11.12 The BigInteger and BigDecimal Classes
35
To create an instance of BigInteger for 454, use
A.
BigInteger(454);
B.
new BigInteger(454);
C.
BigInteger("454");
D.
new BigInteger("454");
36
To create an instance of BigDecimal for 454.45, use
A.
BigInteger(454.45);
B.
new BigInteger(454.45);
C.
BigInteger("454.45");
D.
new BigDecimal("454.45");
37
BigInteger and BigDecimal are immutable
A.
true
B.
false
38
To add BigInteger b1 to b2, you write _________.
A.
b1.add(b2);
B.
b2.add(b1);
C.
b2 = b1.add(b2);
D.
b2 = b2.add(b1);
E.
b1 = b2.add(b1);
39
To divide BigDecimal b1 by b2 and assign the result to b1, you write _________.
A.
b1.divide(b2);
B.
b2.divide(b1);
C.
b1 = b1.divide(b2);
D.
b1 = b2.divide(b1);
E.
b1 = b2.divide(b1);
40
_______ is a reference type.
A.
A class type
B.
An interface type
C.
An array type
D.
A primitive type
41
Which statements are most accurate regarding the following classes?
class A {
   private int i;
   protected int j;
}
class B extends A {
   private int k;
   protected int m;
}
A.
An object of B contains data fields i, j, k, m.
B.
An object of B contains data fields j, k, m.
C.
An object of B contains data fields j, m.
D.
An object of B contains data fields k, m.
42
Which statements are most accurate regarding the following classes?
class A {
   private int i;
   protected int j;
}
class B extends A {
   private int k;
   protected int m;
   // some methods omitted
}
A.
In the class B, an instance method can only access i, j, k, m.
B.
In the class B, an instance method can only access j, k, m.
C.
In the class B, an instance method can only access j, m.
D.
In the class B, an instance method can only access k, m.
43
Which of the following statements are true?
A.
If you compile an interface without errors, a .class file is created for the interface.
B.
If you compile a class without errors but with warnings, a .class file is created.
C.
If you compile a class with errors, a .class file is created for the class.
D.
If you compile an interface without errors, but with warnings, a .class file is created for the interface.