This document discusses abstract classes and interfaces in Java. It explains that abstract classes can contain abstract methods that subclasses must implement. Abstract classes cannot be instantiated. Interfaces also contain abstract methods that implementing classes must define, allowing Java to support multiple inheritance through interfaces. The document provides examples of abstract classes and interfaces and how subclasses and implementing classes extend them.
This document discusses abstract classes and interfaces in Java. It explains that abstract classes can contain abstract methods that subclasses must implement. Abstract classes cannot be instantiated. Interfaces also contain abstract methods that implementing classes must define, allowing Java to support multiple inheritance through interfaces. The document provides examples of abstract classes and interfaces and how subclasses and implementing classes extend them.
Abstract Classes ▪ An abstract class is a way for parent classes to guarantee that child classes provide an implementation for a specific method › Consider the Shape example. Even though a Shape does not know how to find the area of a Triangle or Rectangle, it could require that both of those classes implement a getArea() method ▪ Abstract methods only contain declarations but no implementations › Any class that contains an abstract method must be declared abstract ▪ Abstract classes cannot be instantiated since not all of the methods have implementations ▪ Any class that inherits from an abstract class must implement all of the abstract methods or declare itself abstract › When a class implements an abstract method, it is said to override that method
• Abstract Classes USC CSCI 201L 3/11
Abstract Class Example 1 abstract class Parent { 2 public abstract int meth1(); 3 public int meth2() { 4 return 10; 5 } 6 } 7 8 class Child extends Parent { 9 public int meth1() { 10 return 20; 11 } 12 } 13 public class Test { 14 public static void main(String [] args) { 15 Child c = new Child(); 16 System.out.println(c.meth1()); 17 System.out.println(c.meth2()); 18 Parent p = new Parent(); 19 System.out.println(p.meth1()); 20 System.out.println(p.meth2()); 21 } 22 }
• Abstract Classes USC CSCI 201L 4/11
Abstract Class Example 1 abstract class Parent { 2 public abstract int meth1(); 3 public int meth2() { 4 return 10; 5 } 6 } 7 8 class Child extends Parent { 9 public int meth1() { 10 return 20; 11 } 12 } 13 public class Test { 14 public static void main(String [] args) { 15 Child c = new Child(); 16 System.out.println(c.meth1()); 17 System.out.println(c.meth2()); 18 Parent p = new Child(); 19 System.out.println(p.meth1()); 20 System.out.println(p.meth2()); 21 } 22 }
• Abstract Classes USC CSCI 201L 5/11
Outline • Abstract Classes • Interfaces
USC CSCI 201L
Interfaces ▪ An interface is similar to a class, but there are no method implementations in it (not even inherited) ▪ When a class implements an interface, it must implement all of the methods in the interface › If it doesn’t implement all of the methods, it has then inherited an abstract method, so the class must be declared abstract ▪ A class can implement as many interfaces as it wants › This is how Java deals with supporting something similar to multiple inheritance › This is different than multiple inheritance though. How? • If the same method is inherited from more than one interface, there is no implementation, so there is no confusion ▪ If interfaces inherit from other interfaces, they will extend them
• Interfaces USC CSCI 201L 7/11
Multiple Inheritance and Interfaces ▪ In C++, we had a problem with multiple inheritance when the same function was implemented in two different branches of the hierarchy Telephone Email_Reader make_call() read_email() Which send_email() function send_email() send_email() gets called when you call it on an instance of IPhone?
IPhone IPhone ip;
buy_app() ip.send_email();
It doesn’t matter which one gets called if the Telephone
and Email_Reader classes only contained function definitions and the only implementation was in IPhone
• Interfaces USC CSCI 201L 8/11
Interface Example 1 interface Parent { 2 public abstract int meth1(); 3 public int meth2(); 4 } 5 6 abstract class Child implements Parent { 7 public int meth1() { 8 return 20; 18 public class Test { 9 } 19 public static void main(String [] args) { 10 } 20 GrandChild gc = new GrandChild(); 11 21 System.out.println(gc.meth1()); 12 class GrandChild extends Child { 22 System.out.println(gc.meth2()); 13 public int meth2() { 23 Child c = new Child(); 24 System.out.println(c.meth1()); 14 return 30; 25 System.out.println(c.meth2()); 15 } 26 } 16 } 27 } 17
• Interfaces USC CSCI 201L 9/11
Interface Example 1 interface Parent { 2 public abstract int meth1(); 3 public int meth2(); 4 } 5 6 abstract class Child implements Parent { 7 public int meth1() { 8 return 20; 18 public class Test { 9 } 19 public static void main(String [] args) { 10 } 20 GrandChild gc = new GrandChild(); 11 21 System.out.println(gc.meth1()); 12 class GrandChild extends Child { 22 System.out.println(gc.meth2()); 13 public int meth2() { 23 Child c = new GrandChild(); 24 System.out.println(c.meth1()); 14 return 30; 25 System.out.println(c.meth2()); 15 } 26 } 16 } 27 } 17
• Interfaces USC CSCI 201L 10/11
Interface Example 1 interface Parent { 2 public abstract int meth1(); 3 public int meth2(); 4 } 5 6 abstract class Child implements Parent { 7 public int meth1() { 8 return 20; 18 public class Test { 9 } 19 public static void main(String [] args) { 10 } 20 GrandChild gc = new GrandChild(); 11 21 System.out.println(gc.meth1()); 12 class GrandChild extends Child { 22 System.out.println(gc.meth2()); 13 public int meth2() { 23 Parent p = new GrandChild(); 24 System.out.println(p.meth1()); 14 return 30; 25 System.out.println(p.meth2()); 15 } 26 } 16 } 27 } 17