Lecture 5 Abstract Classes and Interfaces
Coding
Java
OOP
Interface
Abstract Class
This lecture touches on abstract classes and extends it to interfaces. It also introduces
Iterator and Iterable interfaces in Java and how to use them in practice.
Introduction to abstract classes and abstract methods
- In the inheritance hierarchy (tree), classes become more specific and concrete with each new subclass. If we move from a subclass back up to a superclass, the classes become more general and less specific - i.e., more
abstract. - Important class design principle:
- the superclass contains common features of all subclasses
- Sometimes, a common action (method) is not well-defined:
- We know what the action is, but we cannot be specific about it.
- Sometimes, a superclass is so
abstractthat it cannot be used to create any specific instances.
Note 1: Abstract Class
An abstract class is a class that cannot be instantiated. That is, we cannot create instances of an abstract class.
public abstract class className {
// same as a normal class
}- Any class can be defined as
abstract. - We can define (reference) variables of an
abstractclass type - We can also extend (derive a subclass from) an
abstractclass - Therefore, an
abstractclass can serve as the superclass for polymorphic methods.
Note 2: Abstract Methods
An abstract method consists of only the method declaration without the method body. The method declaration consists of only the method header (data types) information.
- Declarations are used to convey data type information to the Java compiler.
public abstract returnType methodname(params);- See
AbstractSort.java - Relationship between
abstractclasses andabstractmethods:abstractmethod:- An
abstractmethod is an incomplete method. It cannot be executed (because it has no method body)
- An
- Rule: A class that contains an
abstractmethod must be defined as anabstractclass.- This is to prevent users from instantiating objects that contains incomplete methods
- Subclasses of
abstractclasses:- A subclass that do not define all the
abstractmethods must be defined as anabstractclass - Otherwise, the class can be defined as a normal class.
- A subclass that do not define all the
- An
abstractclass cannot be defined as afinalclass- An abstract class cannot be instantiated, so it needs to be extended (i.e., not
final) into a concrete class to become instantiable. - Similarly, we can also not have
abstract finalmethods. This is because anabstractmethod is incomplete (has no method body) and must be overridden (notfinal) so the method can become concrete. - A class that contains an
abstractmethod must be defined as anabstractclass
- An abstract class cannot be instantiated, so it needs to be extended (i.e., not
- Some interesting features:
- A class can be
abstracteven if its superclass is non-abstract. - An
abstractsubclass can override a non-abstract method from its superclass with an abstract method.- When the implementation of the method in the superclass becomes invalid in the subclass.
- A class can be
- Practical use of
abstractclasses:- When we are unsure of how a method should be defined/implemented for that class.
- When we do not want objects of that type being instantiated (and used) - even when the class has no abstract methods.
Introduction to Interfaces
Note 3: Interface
An interface can be used to define common behavior for any classes (including unrelated classes). It is a similar mechanism as inheritance for unrelated class that share some behaviors (methods)
- An interface is an abstract class-like construction that contains only
- method declarations and
- constants (
staticandfinal)
- We can define interface variables but cannot instantiate objects with an interface (just like an abstract class)
public interface myInterface {
public abstract void myMethod(); // abstract is optional
// other methods
}- An interface cannot have a constructor method. We cannot create objects of an interface type (similar to an abstract class)
- We can define variables of an interface type (to achieve polymorphism):
myInterface a; - We implement an interface with an implementation class:
public class myClass implements myInterface {
// must override all methods decleared in the interface
public void myMethod(){
System.out.println("Running myMethod() in myClass");
}
}- The implementation class must override all methods declared in an interface.
Tip 1: Example to Use an Interface
- We cannot instantiate an object with an interface type
- Hence, we always upcast an object of its implementation class and assign it to an interface variable.
- We upcast an object if the class implements the interface
- an interface is a superclass (of unrelated objects)
- See
InterfaceSort.java
- The
Comparableinterface of the Java library- It is the superclass of all objects that can be compared.
public interface Comparable<E> { public int compareTo(E o); }- The syntax
<T>is called a generic type in Java.
Tip 2: Example to Use the Comparable Interface
public class Circle extends GeometricObject implements Comparable<Circle> {
private double radius;
// other method omitted
/**
* Arrays.sort() will only work with Comparable objects
* The Circle class must implement the Comparable interface
* in order to use Array.sort()
*/
public int compareTo(Circle other) {
double diff = this.getArea() - other.getArea();
return (int) Math.signum(diff);
}
}A class can inherit from only one class, but a class can implement multiple interfaces.
- Each interface defines a set of capabilities or “roles”.
- Implementing an interface allows a class to fulfill the role defined by an interface.
- Therefore: a class in java can fulfill multiple roles.
instanceof- The
instanceofoperator tells us whether a variable is a member of a class or an interface (i.e., an interface is similar to a class in Java)
- The
Methods with a
defaultimplementation in an interfacepublic interface InterfaceName { public default returnType methodName(params) { // method body } }- Usage: when the implementing class does not override a method with a default implementation, the Java compiler will use the default implementation as the overriding method.
Unlike classes that can extend only 1 class, an interface can extend one or more interfaces
public interface Insurable extends Sellable, Transportable {
public int insuredValue();
}- The interface
Insurablewill combine:- All methods in
Sellable - All methods in
Transportable - The
insuredValue()method
- All methods in
| Abstract Class | Interface |
|---|---|
| Can have constructors, instance variables, constants, abstract methods, and non-abstract methods | Can only have abstract methods and constants |
| Is extended by a subclass that may implement the abstract methods, but does not have to. (If the subclass does not implement all abstract methods, it must be defined as an abstract class too) | Is implemented by a subclass that must implement all the abstract methods |
Review of OOP Concepts
- A class, is like a definition of a data type in Java.
- An instance of an object of a given class is created (instantiated) using a constructor and the
newoperator. - Object instances in Java are accessed through reference variables.
- A subclass can extend a superclass and use its methods and instance variables through inheritance and polymorphism.
- Abstract classes can contain 0 or more abstract methods. Classes containing at least one abstract method must be abstract. Abstract classes can not be used to instantiate objects. Abstract classes are extended by a subclass that defines the abstract methods.
- Interfaces contain only abstract methods and constants and provides a template for another class to implement all of the methods declared in the interface.