constructors and instantiation

Download Constructors And Instantiation

If you can't read please download the document

Upload: eilis

Post on 25-Feb-2016

32 views

Category:

Documents


0 download

DESCRIPTION

Constructors And Instantiation. Constructor Basics. Every class must have a constructor Even abstract classes!! No return types Their names must exactly match the class names. Ex1:. Given: public class A { void A() { System. out .println( "Class A" ); } - PowerPoint PPT Presentation

TRANSCRIPT

  • Constructors And Instantiation

  • Constructor BasicsEvery class must have a constructor

    Even abstract classes!!

    No return types

    Their names must exactly match the class names.

  • Ex1:Given:public class A { void A() { System.out.println("Class A"); } public static void main(String[] args) { new A(); } }What is the result?A. Class AB. Compilation fails.C. An exception is thrown at line 2.D. An exception is thrown at line 6.E. The code executes with no output.

  • Constructor chaining

    LivingBeings

    Mammal

    Cat

    Object()LivingBeings () calls the constructor of Object Mammal() calls the constructor of LivingBeingsCat() calls the constructor of Mammal

  • Ex2:class Base { Base() { System.out.print("Base"); } } public class A extends Base { public static void main( String[] args ) { new A(); new Base(); } }What is the result?A. BaseB. BaseBaseC. Compilation fails.D. The code runs with no output.E. An exception is thrown at runtime.

  • Rules for ConstructorsAccess modifiers privatepublicprotected default

  • Private constructorsclass TestSuper {private int a;private TestSuper(int i) { this.a=i;}public void test(){System.out.println("inside test method");}public static void main(String args[]){TestSuper s=new TestSuper(5);System.out.println(s.a);}}class Test{TestSuper t=new TestSuper(10); //error

    public void callMethod(){test(); //error}}

  • Default constructorcompiler- ALWAYS no args

    class A { A() { } }

    class B extends A { }

    Which two statements are true? (Choose two)A. Class Bs constructor is public.B. Class Bs constructor has no arguments.C. Class Bs constructor includes a call to this().D. Class Bs constructor includes a call to super().

  • Contd..Features of default constructors

    Same access modifier as class

    No arguments

    No arg call to super constructor

  • Ex3: public class Test { }

    What is the prototype of the default constructor?A. Test()B. Test(void)C. public Test()D. public Test(void)E. public void Test()

  • Ex4:Which three statements are true? (Choose three)

    A. The default constructor initializes method variables.B. The default constructor has the same access as its class.C. The default constructor invokes the no-arg constructor of the superclass.D. If a class lacks a no-arg constructor, the compiler always creates a default constructor.E. The compiler creates a default constructor only when there are no other constructors for the class.

  • Ex5:In which two cases does the compiler supply a default constructor for class A? (Choosetwo)A. class A {}B. class A {public A() {}}C. class A {public A(int x) {}}D. class Z {}class A extends Z {void A() {}}

  • Ex6: which would generate compiler error???A. class A {public A (int x) { }}

    B. class A {}class B extends A {B() { }}

    C. class A {A() {}}class B {public B() { }}D. class Z {public Z (int) { }}class A extends Z {}

  • Ex7:

    First statement in a constructor can either super()- call to super class constructor class A1 { public A1() { System.out.println("hello from a"); } } class B extends A1 { public B () { System.out.println("hello from b"); Super(); } } public class A { public static void main(String args[]) { A1 a = new B(); } } What is the result when main is executed? A. Compilation fails. B. hello from a C. hello from b D. hello from b E. hello from a hello from a hello from b

  • this()- call to overloaded constructor class E { int m_x; int m_y;

    public E(int x, int y) { m_x = x; m_y = y; System.out.println("inside parameterised constructor"); } public E() { this(0, 0); // Calls other constructor. System.out.println("inside no parameterised constructor"); }}public class Ex { public static void main(String args[]) { E e=new E(); }}

  • Ex8:Compiler will insert a no arg call to super() as the very first statement by default

    class TestSuper {TestSuper(int i) { } } class TestSub extends TestSuper{ } public class A{ public static void main (String [] args) { new TestSub(); } }Which is true?A. Compilation fails.B. The code runs without exception.C. An exception is thrown at line 7.D. An exception is thrown at line 2.

  • ContdA call to super() may or may not contain arguments

    class Super { public int i = 0; public Super(String text) { i = 1; } }public class Sub extends Super { public Sub(String text) {super(text); i = 2; }

    public static void main(String args[]) { Sub sub = new Sub("Hello"); System.out.println(sub.i); } }What is the result?A. 0 B. 1 C. 2 D. Compilation fails.

  • Contd..No args constructor does not necessarily mean a default constructor.

    public class Ex{Ex() //this is not a default constructor {}

    public static void main(String args[]){Ex e=new Ex();

    }

    }

  • Contd

    Cannot call an instance method or variable until the super class constructor runs.

    Only static variables and methods can be accessed as a part of the call to super

    class E{ int a;E(int i){ }}public class Ex extends E{Ex(){super(E.a); //this will generate an error, but if int a is declared //as static it will not generate an error}public static void main(String args[]){Ex e=new Ex();}}

  • Contdwhen invoking a constructor explicitly from another constructor, only static methods can be invoked. No instance methods can be invoked.

    public class Ex {public static void main (String [] args) {E e1 = new E();System.out.println(e1.val);E e2= new E(4);System.out.println(e2.val);}}class E {int val;E(int n) {this.val = n;}E() {this(getValue());}static int getValue() {int i=10;return i;}}

  • Contd..When concrete class is instantiated, abstract class constructors are called

    Interfaces do not have constructors

    Constructors can only be called from within a constructor not from within a method.

  • Overloaded constructorspublic class Ex {int var; Ex(int var) { this("hello");} Ex(String s) { this(); System.out.println(s); } Ex() { System.out.println("good-bye");} public static void main(String[] args) { Ex t = new Ex(5);}}

  • Benefits of constructor overloadingFlexible ways to instantiate objects

    Avoid code duplication- one constructor calling another overloaded constructor

  • Recursive call to constructors

    class A { A() { this("foo"); }

    A(String s) { this(); }}

    Compiler error

  • Important points

    Constructors are never inherited

    They are not methods

    They cannot be overridden

    They can be overloaded

  • contd

  • THANK YOU