Programming‎ > ‎Java‎ > ‎

4. Interfaces and Inner Classes


  • Interface is a way of describing what classes should do, without specifying how they should do it
  • A class can implement one or more interfaces
  • All methods of an interface are automatically public, so not required to specify access modifier
  • Interfaces can also define constants, fields are always public static final
  • Interfaces never have instance fields
  • Interfaces could have method definition from Java8 as default definition
  • Some interfaces define just constants and no methods
  • You can declare Interface variables, refer to object of class that implements interface

public interface Comparable {
  int compareTo(Object other);

// Any class that implements Comparable interface is required to have compareTo() method with same signature

class Employee implements Comparable {

   public int compareTo(Object other) {
      Employee e = (Employee) other;
      if (salary < other.salary) return -1;
      if (salary > other.salary) return 1;
      return 0;

If (e instanceof Comparable) {...}

  • int compareTo(Object otherObject) - compares this object with otherObject and returns -ive, zero, +ive integer
  • static void sort(Object[] a) - sort the elements in the array a, using tunes mergesort, all element if array must belong to object of class that implements Comparable interface

A class implements the interface by 2 steps
  • Declare the class implements the interface
  • Supply definition of all methods in the interface along with access modfier (e.g. public)

  • Class must implement compareTo() method to avail itself if the sorting service
  • But why can's Employee implement compareTo() without implementing Comparable interface?
  • The reason for interfaces is that Java language is strongly types
  • When making a method call, the compiler needs to able to check that the method actually exist
  • If object variable is type Comparable, then existence of the method is assured
Interfaces and Abstract Classes
  • Why can't Comparable simply be an abstract class
  • A generic property can't be expressed using the class inheritance, since multiple class inheritance is not supported

Object Cloning

  • A clone of an object is a new object that has the same state as the original but a different identity
  • If you class implements Cloneable, the clone method in the Object class will make an exact copy of your class's object
  • The clone method is a protected method of Object, which means that your code cannot simply call it.
  • Only the Employee class can clone Employee objects
  • The default cloning operation is "shallow"
  • If the subobjects that is shared between the original and the shallow clone is immutable, then the sharing is safe
  • Even if the default (shallow copy) is adequate, you still need to implement the Cloneable interface, redefine clone to be public, call super.clone(), and catch the CloneNotSupportedException
Employee copy = (Employee) original.clone);

class Person implements Cloneable {
   public Object clone() { 
      try {
         return super.clone();
      catch(CloneNotSupportedException e) { return null;}


Inner Classes

  • Inner classes are technically somewhat complex, they are defined inside other classes
  • Their methods can access the fields of the surrounding class