1 / 24

METHOD OVERRIDING

METHOD OVERRIDING. Sub class can override the methods defined by the super class. Overridden Methods in the sub classes should have same name, same signature , same return type and may have either the same or higher scope than super class method.

aaron
Download Presentation

METHOD OVERRIDING

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. METHOD OVERRIDING • Sub class can override the methods defined by the super class. • Overridden Methods in the sub classes should have same name, same signature , same return type and may have either the same or higher scope than super class method. • Java implements Run Time Polymorphism/ Dynamic Method Dispatch by Method Overriding. [Late Binding] • Call to Overridden Methods is Resolved at Run Time. • Call to a overridden method is not decided by the type of reference variable Rather by the type of the object where reference variable is pointing. • While Overriding a Method, the sub class should assign either same or higher access level than super class method.

  2. EXAMPLE METHOD OVERRIDING class A { void show() { System.out.println("Hello This is show() in A"); }// End of show() Method } // End of class A class B extends A { void show() { System.out.println("Hello This is show() in B"); }// End of show() Method } // End of class B B class overrides show() method from super class A class override { public static void main(String args[]) { // super class reference variable // can point to sub class object A a1 = new A(); a1.show(); a1 = new B(); a1.show(); } } Call to show() of A class Call to show() of B class

  3. Is this Method Overriding class A { void show(int a) { System.out.println("Hello This is show() in A"); } } class B extends A { void show() { System.out.println("Hello This is show() in B"); } } class override1 { public static void main(String args[]) { /* A a1 = new B(); a1.show(); */ A a1 = new A(); a1.show(10); B b1 = new B(); b1.show(10); b1.show(); } NO OUTPUT Hello This is show() in A Hello This is show() in A Hello This is show() in B

  4. Dynamic Method Dispatch • Super class reference variable can refer to a sub class object. • Super class variable if refers to sub class object can call only overridden methods. • Call to an overridden method is decided by the type of object referred to. A A a1 = new B(); a1.show(); // call to show() of B a1 = new C(); a1.show(); // call to show() of C a1 = new D(); a1.show(); // call to show() of D B C D Assume show() Method is Overridden by sub classes

  5. class A{void show(){System.out.println("Hello This is show() in A");}}class B extends A{void show(){System.out.println("Hello This is show() in B");}} DYNAMIC METHOD DISPATCH class C extends A{void show(){System.out.println("Hello This is show() in C");}}class D extends A{void show(){System.out.println("Hello This is show() in D");}} CONTINUED…..

  6. class override2 { public static void main(String args[]) { A a1 = new A(); a1.show(); a1 = new B(); a1.show(); a1 = new C(); a1.show(); a1 = new D(); a1.show(); } } Hello This is show() in A Hello This is show() in B Hello This is show() in C Hello This is show() in D

  7. class override3 { public static void main(String args[]) { A a1 = new B(); B b1 = (B) a1; /* A a1 = new B(); C c1 = (C) a1; Exception in thread "main" java.lang.ClassCastException: B at override3.main(override3.java:39) */ } }

  8. Examples Overriding A a1 = new B(); a1.show() ; // Valid // a1.show(10); // Invalid //a1.print(); // Invalid class A { void show() { …. } } class B extends A { void show() { …. } void show(int x) { … } void print() { … } } When a super class variable points to a sub class object, then it can only call overridden methods of the sub class.

  9. class A { protected void show() { System.out.println("Hi"); } } class B extends A { void show() { System.out.println("Hi"); } } D:\Java1>javac AB.java AB.java:10: show() in B cannot override show() in A; attempting to assign weaker access privileges; was protected void show() ^ 1 error

  10. IS THIS METHOD OVERRIDING class A { private void show() { System.out.println("Hi"); } } class B extends A { int show() { System.out.println("Hi"); return 10; } } NO CODE WILL COMPILE & RUN SUCESSFULLY

  11. What’s Wrong Here class A { static int show() { System.out.println("class A"); return 0; } } class B extends A { void show() { System.out.println("class B"); } } sample.java:12: show() in B cannot override show() in A; overridden method is st atic void show() ^ 1 error

  12. What’s Wrong Here class A { static int show() { System.out.println("class A"); return 0; } } class B extends A { static int show() { System.out.println("class B"); } } Nothing The code will compile and run successfully. Method Hiding B class Hides show() method from super class A

  13. Will code Compile Sucessfully class A { static int show() { System.out.println("SHOW METHOD OF CLASS A"); return 0; }// End of show() Method }// End of class A class B extends A { static void show() { System.out.println("SHOW METHOD OF CLASS B"); }// End of show() Method }// End of class B TestAB.java:11: show() in B cannot override show() in A; attempting to use incompatible return type found : void required: int static void show()

  14. class A { static int show() { System.out.println("SHOW METHOD OF CLASS A"); return 0; }// End of show() Method }// End of class A class B extends A { static int show() { System.out.println("SHOW METHOD OF CLASS B"); return 0; }// End of show() Method }// End of class B class TestAB { public static void main(String args[]) { A a1 = new B(); System.out.println(a1.show()); B b1 = new B(); b1.show(); } } E:\Java Programs>java TestAB SHOW METHOD OF CLASS A 0 SHOW METHOD OF CLASS B

  15. class A { private int a; private int b; private int c; A() { a=b=c=10; } A(int a, int b, int c) { this.a = a; this.b = b; this.c = c; } public int getA() { return this.a;} public int getB() { return this.b;} public int getC() { return this.c;} public void show() { System.out.println("a="+a); System.out.println("b="+b); System.out.println("c="+c); }// End of show() Method }// End of class A class B extends A { private int d; B() { super(); d=10; } B(int a, int b, int c,int d) { super(a,b,c); this.d = d; } public int getD() { return this.d;} public void show() { System.out.println("a="+super.getA()); System.out.println("b="+super.getB()); System.out.println("c="+super.getC()); System.out.println("d="+this.d); }// End of show() Method }// End of class B

  16. class Test { public static void main(String args[]) { A a1 = new B(); System.out.println(a1.getA()); System.out.println(a1.getD()); a1.show(); }// End of main() Method }// End of class Test Test.java:56: cannot find symbol symbol : method getD() location: class A System.out.println(a1.getD());

  17. Polymorphism • In the previous slide, the two variables are defined to have the same type at compile time: BankAccount • However, the types of objects they are referring to at runtime are different • What happens when the withdraw method is invoked on each object? • anAccount refers to an instance of BankAccount. Therefore, the withdraw method defined in BankAccount is invoked. • account1 refers to an instance of OverdraftAccount. Therefore, the withdraw method defined in OverdraftAccount is invoked. • Polymorphism is: The method being invoked on an object is determined AT RUNTIME and is based on the type of the object receiving the message.

  18. public final booleanvalidatePassword(String username, String Password) { [...] Final Methods and Final Classes • Methods can be qualified with the final modifier • Final methods cannot be overridden. • This can be useful for security purposes. • Classes can be qualified with the final modifier • The class cannot be extended • This can be used to improve performance. Because there an be no subclasses, there will be no polymorphic overhead at runtime. public final class Color { [...]

  19. Inheritance • To write a method’s definition of a subclass, specify a call to the public method of the superclass. • If subclass overrides public method of superclass, specify call to public method of superclass: super.MethodName(parameter list) • If subclass does not override public method of superclass, specify call to public method of superclass: MethodName(parameter list)

  20. Polymorphism • Java allows us to treat an object of a subclass as an object of its superclass. In other words, a reference variable of a superclass type can point to an object of its subclass. Person name, nameRef; PartTimeEmployee employee, employeeRef; name = new Person("John", "Blair"); employee = new PartTimeEmployee("Susan", "Johnson", 12.50, 45); nameRef = employee; System.out.println("nameRef: " + nameRef); nameRef: Susan Johnson wages are: $562.5

  21. Polymorphism • Late binding or dynamic binding (run-time binding): • Method to be executed is determined at execution time, not compile time. • The term polymorphism means to assign multiple meanings to the same method name. • In Java, polymorphism is implemented using late binding. • The reference variable name or nameRef can point to any object of the classPerson or the classPartTimeEmployee. • These reference variables have many forms, that is, they are polymorphic reference variables. They can refer to objects of their own class or to objects of the classes inherited from their class.

  22. Polymorphism • You can declare a method of a class final using the keyword final. For example, the following method is final. public final void doSomeThing() { //... } • If a method of a class is declared final, it cannot be overridden with a new definition in a derived class. • In a similar manner, you can also declare a class final using the keyword final. • If a class is declared final, then no other class can be derived from this class. • Java does not use late binding for methods that are private, marked final, or static.

  23. Polymorphism • You cannot automatically make reference variable of subclass type point to object of its superclass. • Suppose that supRef is a reference variable of a superclass type. Moreover, suppose that supRef points to an object of its subclass: • You can use an appropriate cast operator on supRef and make a reference variable of the subclass point to the object. • On the other hand, if supRef does not point to a subclass object and you use a cast operator on supRef to make a reference variable of the subclass point to the object, then Java will throw a ClassCastException—indicating that the class cast is not allowed.

  24. Abstract Classes • A class that is declared with the reserved word abstract in its heading. • An abstract class can contain instance variables, constructors, finalizers, and non-abstract methods. • An abstract class can contain abstract methods. • If a class contains an abstract method, the class must be declared abstract. • You cannot instantiate an object of an abstract class type. You can only declare a reference variable of an abstract class type. • You can instantiate an object of a subclass of an abstract class, but only if the subclass gives the definitions of all the abstract methods of the superclass.

More Related