General Questions

Question 11 :

What is the widest valid returnType for methodA in line 3?

public class ReturnIt 
{ 
    returnType methodA(byte x, double y) /* Line 3 */
    { 
        return (long)x / y * 2; 
    } 
}


A). int
B). byte
C). long
D). double
Answer : Option D

Explanation :

However A, B and C are all wrong. Each of these would result in a narrowing conversion. Whereas we want a widening conversion, therefore the only correct answer is D. Don't be put off by the long cast, this applies only to the variable x and not the rest of the expression. It is the variable y (of type double) that forces the widening conversion to double.

Java's widening conversions are:
- From a byte to a short, an int, a long, a float, or a double.
- From a short, an int, a long, a float, or a double.
- From a char to an int, a long, a float, or a double.
- From an int to a long, a float, or a double.
- From a long to a float, or a double.
- From a float to a double.


Question 12 :

class A 
{  
    protected int method1(int a, int b) 
    {
        return 0; 
    } 
}
Which is valid in a class that extends class A?


A). public int method1(int a, int b) {return 0; }
B). private int method1(int a, int b) { return 0; }
C). public short method1(int a, int b) { return 0; }
D). static protected int method1(int a, int b) { return 0; }
Answer : Option A

Explanation :

Option A is correct - because the class that extends A is just simply overriding method1.
Option B is wrong - because it can't override as there are less access privileges in the subclass method1.
Option C is wrong - because to override it, the return type needs to be an integer. The different return type means that the method is not overriding but the same argument list means that the method is not overloading. Conflict - compile time error.
Option D is wrong - because you can't override a method and make it a class method i.e. using static.


Question 13 :

Which one creates an instance of an array?


A). int[ ] ia = new int[15];
B). float fa = new float[20];
C). char[ ] ca = "Some String";
D). int ia[ ] [ ] = { 4, 5, 6 }, { 1,2,3 };
Answer : Option A

Explanation :

Option A is correct. It uses correct array declaration and correct array construction.
Option B is incorrect. It generates a compiler error: incompatible types because the array variable declaration is not correct. The array construction expects a reference type, but it is supplied with a primitive type in the declaration.
Option C is incorrect. It generates a compiler error: incompatible types because a string literal is not assignable to a character type variable.
Option D is wrong, it generates a compiler error expected. The compiler thinks that you are trying to create two arrays because there are two array initialisers to the right of the equals, whereas your intention was to create a 3 x 3 two-dimensional array.


Question 14 :

Which two of the following are legal declarations for nonnested classes and interfaces?
1. final abstract class Test {}
2. public static interface Test {}
3. final public class Test {}
4. protected abstract class Test {}
5. protected interface Test {}
6. abstract public class Test {}


A). 1 and 4
B). 2 and 5
C). 3 and 6
D). 4 and 6
Answer : Option C

Explanation :

(3), (6). Both are legal class declarations.

(1) is wrong because a class cannot be abstract and final—there would be no way to use such a class. (2) is wrong because interfaces and classes cannot be marked as static. (4) and (5) are wrong because classes and interfaces cannot be marked as protected.


Question 15 :

Which of the following class level (nonlocal) variable declarations will not compile?


A). protected int a;
B). transient int b = 3;
C). private synchronized int e;
D). volatile int d;
Answer : Option C

Explanation :

Option C will not compile; the synchronized modifier applies only to methods.

Option A and B will compile because protected and transient are legal variable modifiers. Option D will compile because volatile is a proper variable modifier.