Java Interface
Java Interface
Agenda
What is an Abstract method and an Abstract class? What is Interface? Why Interface? Interface as a Type Interface vs. Class Defining an Interface Implementing an Interface Implementing multiple Interface's Inheritance among Interface's Interface and Polymorphism Rewriting an Interface 2
Abstract Methods
Methods that do not have implementation (body) To create an abstract method, just write the method declaration without the body and use the abstract keyword
No { }
For example,
// Note that there is no body public abstract void someMethod();
Abstract Class
An abstract class is a class that contains one or more abstract methods An abstract class cannot instantiated
// You will get a compile error on the following code MyAbstractClass a1 = new MyAbstractClass();
Concrete class has to implement all abstract methods of the abstract class in order to be used for instantiation Concrete class uses extends keyword
5
When a concrete class extends the LivingThing abstract class, it must implement the abstract method walk(), or else, that subclass will also become an abstract class, and therefore cannot be instantiated. For example,
public class Human extends LivingThing { public void walk(){ System.out.println("Human walks..."); } }
7
Abstract methods are usually declared where two or more subclasses are expected to fulfill a similar role in different ways through different implementations
These subclasses extend the same Abstract class and provide different implementations for the abstract methods
Use abstract classes to define broad types of behaviors at the top of an object-oriented programming class hierarchy, and use its subclasses to provide implementation details of the abstract class.
8
What is Interface?
9
What is an Interface?
Defines a contract Defines the signatures of a set of methods, without the body (implementation of the methods)
A concrete class must implement the interface (all the abstract methods of the Interface) It allows classes, regardless of their locations in the class hierarchy, to implement common behaviors
10
Example: Interface
// Note that Interface contains just set of method // signatures without any implementations. // No need to say abstract modifier for each method // since it assumed. public interface Relation { public boolean isGreater( Object a, Object b); public boolean isLess( Object a, Object b); public boolean isEqual( Object a, Object b); }
11
Why Interface?
13
To reveal an object's programming interface (functionality of the object) without revealing its implementation
This is the concept of encapsulation The implementation can change without affecting the caller of the interface The caller does not need the implementation at the compile time
It needs only the interface at the compile time During runtime, actual object instance is associated with the interface type
14
One class is not a sub-class of another Class Line and class MyInteger They are not related through inheritance You want both to implement comparison methods checkIsGreater(Object x, Object y) checkIsLess(Object x, Object y) checkIsEqual(Object x, Object y) Define Comparison interface which has the three abstract methods above
Example:
15
A class can implement multiple interfaces while it can extend only one class
16
All methods of an Interface are abstract methods while some methods of an Abstract class are abstract methods
An interface can only define constants while abstract class can have fields Interfaces have no direct inherited relationship with any particular class, they are defined independently
Interface as a Type
18
Interface as a Type
When you define a new interface, you are defining a new reference type You can use interface names anywhere you can use any other type name If you define a reference variable whose type is an interface, any object you assign to it must be an instance of a class that implements the interface
19
Person p1 = new Person(); PersonInterface pi1 = p1; PersonInterface pi2 = new Person();
20
This means that an interface can be used in places where a class can be used For example:
// Recommended practice PersonInterface Person pi = new Person(); // Not recommended practice pc = new Person();
22
23
Defining Interface
24
Defining Interfaces
25
Defining Interfaces
As an example, let's create an interface that defines relationships between two objects according to the natural order of the objects.
public interface Relation { public boolean isGreater( Object a, Object b); public boolean isLess( Object a, Object b); public boolean isEqual( Object a, Object b); }
26
Implementing Interface
27
Implementing Interfaces
To create a concrete class that implements an interface, use the implements keyword.
/** * Line class implements Relation interface */ public class Line implements Relation { private double x1; private double x2; private double y1; private double y2; public Line(double x1, double x2, double y1, double y2){ this.x1 = x1; this.x2 = x2; this.y1 = y1; this.y2 = y2; } // More code follows
28
Implementing Interfaces
public double getLength(){ double length = Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)* (y2-y1)); return length; } public boolean isGreater( Object a, Object b){ double aLen = ((Line)a).getLength(); double bLen = ((Line)b).getLength(); return (aLen > bLen); } public boolean isLess( Object a, Object b){ double aLen = ((Line)a).getLength(); double bLen = ((Line)b).getLength(); return (aLen < bLen); } public boolean isEqual( Object a, Object b){ double aLen = ((Line)a).getLength(); double bLen = ((Line)b).getLength(); return (aLen == bLen); } }
29
Implementing Interfaces
When your class tries to implement an interface, always make sure that you implement all the methods of that interface, or else, you would encounter this error,
Line.java:4: Line is not abstract and does not override abstract method isGreater(java.lang.Object,java.lang.Object) in Relation public class Line implements Relation ^ 1 error
30
Implementing Class
Implementing class can have its own methods Implementing class extend a single super class or abstract class
31
A concrete class can only extend one super class, but it can implement multiple Interfaces
The Java programming language does not permit multiple inheritance (inheritance is discussed later in this lesson), but interfaces provide an alternative.
All abstract methods of all interfaces have to be implemented by the concrete class
33
34
Interfaces are not part of the class hierarchy However, interfaces can have inheritance relationship among themselves
public interface PersonInterface { void doSomething(); } public interface StudentInterface extends PersonInterface { void doExtraSomething(); }
36
Interfaces exhibit polymorphism as well, since program may call an interface method, and the proper version of that method will be executed depending on the type of object instance passed to the interface method call
38
Rewriting Interfaces
39
Create more interfaces later For example, you could create a DoItPlus interface that extends DoIt:
public interface DoItPlus extends DoIt { boolean didItWork(int i, double x, String s); }
Now users of your code can choose to continue to use the old interface or to upgrade to the new interface
41
For non-abstract methods, you want to use them when you want to provide common implementation code for all sub-classes
For abstract methods, the motivation is the same with the ones in the interface to impose a common behavior for all sub-classes without dictating how to implement it Remember a concrete can extend only one super class whether that super class is in the form of concrete class or abstract class
43