Sail E0 Webinar

MCQs

Total Questions : 51 | Page 1 of 6 pages
Question 1.
package testpkg.p1;
public class ParentUtil
{
public int x = 420;
protected int doStuff() { return x; }
}
package testpkg.p2;
IMPORT testpkg.p1.ParentUtil;
public class ChildUtil extends ParentUtil
{
public static void main(String [] args)
{
new ChildUtil().callStuff();
}
void callStuff()
{
System.out.print("this " + this.doStuff() ); /* Line 18 */
ParentUtil p = new ParentUtil();
System.out.print(" parent " + p.doStuff() ); /* Line 20 */
}
}


which statement is true?


  1.    The code compiles and runs, with output this 420 parent 420.
  2.    If line 18 is removed, the code will compile and run.
  3.    If line 20 is removed, the code will compile and run.
  4.    An exception is thrown at runtime.
 Discuss Question
Answer: Option C. -> If line 20 is removed, the code will compile and run.

The ParentUtil instance p cannot be used to access the doStuff() method. Because 

doStuff() has protected access, and the ChildUtil class is not in the same package as the ParentUtil class, doStuff()can be accessed only by instances of the ChildUtil class

 (a subclass of ParentUtil).

Option A, B and D are incorrect because of the access rules described previously.

Question 2.

Which three statements are true?

    1. The default constructor initialises method variables.

    2. The default constructor has the same access as its class.

    3. The default constructor invokes the no-arg constructor of the superclass.

    4. If a class lacks a no-arg constructor, the compiler always creates a default constructor.

    5. The compiler creates a default constructor only when there are no other constructors for the class.



  1.    1, 2 and 4
  2.    2, 3 and 5
  3.    3, 4 and 5
  4.    1, 2 and 3
 Discuss Question
Answer: Option B. -> 2, 3 and 5


(2) sounds correct as in the example below


class CoffeeCup {
private int innerCoffee;
public CoffeeCup() {
}
public void add(int amount) {
innerCoffee += amount;
}
//...
}


The compiler gives default constructors the same access level as their class.



In the example above, class CoffeeCup is public, so the default constructor is



public. If CoffeeCup had been given package access, the default constructor would



be given package access as well.



(3) is correct. The Java compiler GENERATES at least one instance initialisation



method for every class it compiles. In the Java class file, the instance initialisation



method is named "." For each constructor in the source code of a class, the Java



compiler generates one () method. If the class declares no constructors explicitly,



the compiler generates a default no-arg constructor that just invokes the superclass's



no-arg constructor. As with any other constructor, the compiler creates an () method



in the class file that corresponds to this default constructor.



(5) is correct. The compiler creates a default constructor if you do not declare any



constructors in your class.


Question 3.
/* Missing statements ? */
public class NewTreeSet extends java.util.TreeSet
{
public static void main(String [] args)
{
java.util.TreeSet t = new java.util.TreeSet();
t.clear();
}
public void clear()
{
TreeMap m = new TreeMap();
m.clear();
}
}


which two statements, added independently at beginning of the program, allow the code to compile?



1. No statement is required



2. import java.util.*;



3. import.java.util.Tree*;



4. import java.util.TreeSet;



5. import java.util.TreeMap;


  1.    1 only
  2.    2 and 5
  3.    3 and 4
  4.    3 and 5
 Discuss Question
Answer: Option B. -> 2 and 5

(2) and (5). TreeMap is the only class that must be imported. TreeSet does not need an 

import statement because it is described with a fully qualified name.

(1) is incorrect because TreeMap must be imported. (3) is incorrect syntax for an import 

statement. (4) is incorrect because it will not import TreeMap, which is required.

Question 4.

Which two statements are true for any concrete class implementing the java.lang.Runnable interface?

     1. You can extend the Runnable interface as long as you override the public run() method.

     2. The class must contain a method called run() from which all code for that thread will be initiated.

     3. The class must contain an empty public void method named run().

     4. The class must contain a public void method named runnable().

     5. The class definition must include the words implements Threads and contain a method called run().

     6. The mandatory method must be public, with a return type of void, must be called run(), and cannot take any              arguments.



  1.    1 and 3
  2.    2 and 4
  3.    1 and 5
  4.    2 and 6
 Discuss Question
Answer: Option D. -> 2 and 6

(2) and (6). When a thread's run() method completes, the thread will die. The run() 

method must be declared public void and not take any arguments.

(1) is incorrect because classes can never extend interfaces. (3) is incorrect because 

the run() method is typically not empty; if it were, the thread would do nothing. (4) is incorrect 

because the mandatory method is run(). (5) is incorrect because the class implements Runnable.

Question 5.
interface DoMath
{
double getArea(int rad);
}
interface MathPlus
{
double getVol(int b, int h);
}
/* Missing Statements ? */


which two code fragments inserted at end of the program, will allow to compile?



1. class AllMath extends DoMath { double getArea(int r); }



2. interface AllMath implements MathPlus { double getVol(int x, int y); }




3. interface AllMath extends DoMath { float getAvg(int h, int l); }



4. class AllMath implements MathPlus { double getArea(int rad); }



5. abstract class AllMath implements DoMath, MathPlus { public double getArea(int rad)



{ return rad * rad * 3.14; } }


  1.    1 only
  2.    2 only
  3.    3 and 5
  4.    1 and 4
 Discuss Question
Answer: Option C. -> 3 and 5

(3) are (5) are correct because interfaces and abstract classes do not need to fully 

implement the interfaces they extend or implement (respectively).

(1) is incorrect because a class cannot extend an interface. (2) is incorrect because an 

interface cannot implement anything. (4) is incorrect because the method being implemented 

is from the wrong interface.


Question 6.


What will be the output of the program?


class Super
{
public Integer getLength()
{
return new Integer(4);
}
}
public class Sub extends Super
{
public Long getLength()
{
return new Long(5);
}
public static void main(String[] args)
{
Super sooper = new Super();
Sub sub = new Sub();
System.out.println(
sooper.getLength().toString() + "," + sub.getLength().toString() );
}
}
  1.    4, 4
  2.    4, 5
  3.    5, 4
  4.    Compilation fails.
 Discuss Question
Answer: Option D. -> Compilation fails.

Option D is correct, compilation fails - The return type of getLength( ) in the super 

class is an object of reference type Integer and the return type in the sub class is 

an object of reference type Long. In other words, it is not an override because of 

the change in the return type and it is also not an overload because the argument 

list has not changed.


Question 7.


What will be the output of the program?


public class ArrayTest
{
public static void main(String[ ] args)
{
float f1[ ], f2[ ];
f1 = new float[10];
f2 = f1;
System.out.println("f2[0] = " + f2[0]);
}
}
  1.    It prints f2[0] = 0.0
  2.    It prints f2[0] = NaN
  3.    An error at f2 = f1; causes compile to fail.
  4.    It prints the garbage value.
 Discuss Question
Answer: Option A. -> It prints f2[0] = 0.0

Option A is correct. When you create an array (f1 = new float[10];) the elements are 

initialises to the default values for the primitive data type (float in this case - 0.0), so 

f1 will contain 10 elements each with a value of 0.0. f2has been declared but has not 

been initialised, it has the ability to reference or point to an array but as yet does not 

point to any array. f2 = f1; copies the reference (pointer/memory address) of f1 into f2 

so now f2 points at the array pointed to by f1.

This means that the values returned by f2 are the values returned by f1. Changes to f1 

are also changes to f2because both f1 and f2 point to the same array.

Question 8.


What will be the output of the program?


class Base
{
Base()
{
System.out.print("Base");
}
}
public class Alpha extends Base
{
public static void main(String[] args)
{
new Alpha(); /* Line 12 */
new Base(); /* Line 13 */
}
}
  1.    Base
  2.    BaseBase
  3.    Compilation fails
  4.    The code runs with no output
 Discuss Question
Answer: Option B. -> BaseBase

Option B is correct. It would be correct if the code had compiled, and the subclass 

Alpha had been saved in its own file. In this case Java supplies an implicit call from

 the sub-class constructor to the no-args constructor of the super-class therefore line

 12 causes Base to be output. Line 13 also causes Base to be output.

Option A is wrong. It would be correct if either the main class or the subclass had not

 been instantiated.

Option C is wrong. The code compiles.

Option D is wrong. There is output.

Question 9.


What will be the output of the program?


import java.util.*;
public class NewTreeSet2 extends NewTreeSet
{
public static void main(String [] args)
{
NewTreeSet2 t = new NewTreeSet2();
t.count();
}
}
protected class NewTreeSet
{
void count()
{
for (int x = 0; x < 7; x++,x++ )
{
System.out.print(" " + x);
}
}
}
  1.    0 2 4
  2.    0 2 4 6
  3.    Compilation fails at line 2
  4.    Compilation fails at line 10
 Discuss Question
Answer: Option D. -> Compilation fails at line 10

Nonnested classes cannot be marked protected (or final for that matter), so the 

compiler will fail at protected class NewTreeSet.


Question 10.


What will be the output of the program?


interface Count
{
short counter = 0;
void countUp();
}
public class TestCount implements Count
{
public static void main(String [] args)
{
TestCount t = new TestCount();
t.countUp();
}
public void countUp()
{
for (int x = 6; x>counter; x--, ++counter) /* Line 14 */
{
System.out.print(" " + counter);
}
}
}
  1.    0 1 2
  2.    1 2 3
  3.    0 1 2 3
  4.    1 2 3 4
  5.    Compilation fails
 Discuss Question
Answer: Option E. -> Compilation fails

The code will not compile because the variable counter is an interface variable 

that is by default final static. The compiler will complain at line 14 when the code

 attempts to increment counter.

Latest Videos

Latest Test Papers