Prev | Next |
Quiz - 3
This quiz tests your knowledge of Java language semantics. Get a print out of this when you come to the class.
- First try answering without running the program.
- Then run the program to check if your understanding was indeed correct.
- Enter both the answers in the last column and submit.
Concept | Program | Your answer first, followed by the actual answer |
Visibility of super class attributes |
// A.java public class A { private float f; // Try 'protected' } // AX.java public class AX extends A { public AX() { this.f = 1.0f; } } // ATest.java public class ATest { public static void main(String[] args) { AX ax = new AX(); } } |
|
Accessing super and sub class attributes alike |
// B.java public class B { protected int x; } // BX.java public class BX extends B { protected int y; public BX() { this.x = 1; this.y = 2; } public String toString() { return this.x + " " + this.y; } } // BTest.java public class BTest { public static void main(String[] args) { BX bx = new BX(); System.out.println(bx); } } |
|
Accessing super class attributes if hidden |
// C.java public class C { protected int x; } // CX.java public class CX extends C { protected int x; public CX() { super.x = 1; this.x = 2; } public String toString() { return super.x + " " + this.x; } } // CTest.java public class CTest { public static void main(String[] args) { CX cx = new CX(); System.out.println(cx); } } |
|
Explicit call to super class constructor necessary |
// D.java public class D { protected int x; public D() { this.x = 1; } } // DX.java public class DX extends D { protected int y; public DX() { super(); // What if we comment this this.y = 1; } public String toString() { return this.x + " " + this.y; } } // DTest.java public class DTest { public static void main(String[] args) { DX dx = new DX(); System.out.println(dx); } } |
|
Overriding |
// E.java public class E { protected int x; public void set(int x) { this.x = x; } public String toString() { return this.x; } } // EX.java public class EX extends E { public void set(int x) { this.x = 2*x; } public String toString() { return this.x; } } // ETest.java public class ETest { public static void main(String[] args) { E e = new E(); e.set(4); System.out.println(e); EX ex = new EX(); ex.set(4); System.out.println(ex); } } |
|
Overriding a private method |
// F.java public class F { protected int x; private void set(int x) { this.x = x; } public String toString() { return this.x; } } // FX.java public class FX extends F { public void set(int x) { this.x = 2*x; } public String toString() { return this.x; } } // FTest.java public class FTest { public static void main(String[] args) { F f = new F(); f.set(4); System.out.println(f); FX fx = new FX(); fx.set(4); System.out.println(fx); } } |
|
Overriding a private method (Use of @override) |
// G.java public class G { protected int x; private void set(int x) { this.x = x; } public String toString() { return this.x; } } // GX.java public class GX extends G { // @override public void set(int x) { this.x = 2*x; } public String toString() { return this.x; } } // GTest.java public class GTest { public static void main(String[] args) { G g = new G(); g.set(4); System.out.pgrintln(g); GX gx = new X(); gx.set(4); System.out.println(gx); } } |
|
Assignment of subclass type to a superclass type and vice-versa |
// H.java public class H { protected int x; public H() { this.x = 1; } public String toString() { return x; } } // HX.java public class HX extends H { protected int y; public HX() { super(); this.y = 1; } public String toString() { return x + " " + y; } } // HTest.java public class HTest { public static void main(String[] args) { H h = new H(); System.out.println(h); HX hx = new HX(); h = hx; System.out.println(h); // hx = h; // Uncomment this and check } } |
|
Assignment of subclass type to a superclass type during creation of object and vice-versa |
// I.java public class I { protected int x; public I() { this.x = 1; } public String toString() { return x; } } // IX.java public class IX extends I { protected int y; public IX() { super(); this.y = 1; } public String toString() { return x + " " + y; } } // ITest.java public class ITest { public static void main(String[] args) { I i1 = new I(); I i2 = new IX(); System.out.println(i1); System.out.println(i2); // IX ix1 = new IX(); // Uncomment and // IX ix2 = new I(); // check 1-by-1 } } |
|
Passing subclass type to a method that takes superclass type as a parameter and vice-versa |
// J.java public class J { protected int x; public J() { x = 1; } public String toString() { return x; } } // JX.java public class JX extends J { protected int y; public JX() { super(); y = 1; } public String toString() { return x + " " + y; } } // JTest.java public class JTest { public static void main(String[] args) { JTest jt = new JTest(); jt.print(new J()); jt.print(new JX()); // jt.display(new JX()); // Uncomment // jt.display(new J()); // and check } public void print(J j) { System.out.println(j); } public void display(JX jx) { System.out.println(jx); } } |
|
Explicit casting of superclass type while assigning to a subclass type |
// K.java public class K { protected int x; public K() { x = 1; } public String toString() { return x; } } // KX.java public class KX extends K { protected int y; public KX() { super(); y = 1; } public String toString() { return x + " " + y; } } // KTest.java public class KTest { public static void main(String[] args) { K k = new K(); KX kx = (KX) k; System.out.println(kx); // Check the output! } } |
|
Overriding static method does not make sense |
// L.java public class L { public static void greet() { System.out.println("L"); } } // LX.java public class LX extends L { public static void greet() { System.out.println("LX"); } } // LTest.java public class LTest { public static void main(String[] args) { L.greet(); LX.greet(); } } |
|
Multiple inheritance is not supported |
// MA.java public class MA { protected int a; public MA() { a = 1; } } // MB.java public class MB { protected int b; public MB() { b = 1; } } // MX.java public class MX extends MA, MB { MX() { a = 2; b = 2; } } |