In-depth Notes on Java Interfaces and Abstract Classes
Difference Between Interface and Regular Class
- Definition: An interface in Java is an abstract type that specifies the behavior a class should implement, but does not implement how those behaviors are carried out.
- Creation: To create a program with an interface, one uses the
interface keyword.
Abstract Classes vs Interfaces
- Abstract Classes: Must declare a class with the
abstract keyword, can have a body for methods, and need to implement the methods in derived classes.- Abstract classes can have concrete methods (methods with implementation).
- Interfaces: Can be declared using the
interface keyword, only contain abstract methods (methods without a body). - Interfaces cannot have concrete methods; all methods are inherently abstract in nature.
- All fields in an interface are public, static, and final by default.
Characteristics of Interfaces
- Blueprint Functionality: Interfaces serve as blueprints, defining what methods a class must implement without detailing how they should be done.
- Capabilities: Define capabilities that classes must adhere to, e.g., declaring that a
Player interface has a method for move(). - Uses of Interface:
- Facilitate abstraction by focusing on the behavior rather than implementation.
- Allow for achieving multiple inheritance since Java does not support it directly with classes.
- Promote low coupling between components by standardizing method signatures without enforcing implementation details.
Interface Declaration and Structure
- Declaring an Interface: Use the
interface keyword to declare a new interface. - Methods in Interfaces: Use the keyword
abstract in method declarations, although it's optional as all methods in interfaces are abstract by default and do not have method bodies. - Access Specifiers: Interfaces use the
public access specifier primarily.
Advantages of Interfaces
- Multiple Implementation: A class can implement multiple interfaces, allowing for greater flexibility in design.
- Decoupling: Interfaces help separate the definition of functionality from its implementation.
Example Program Structure Using Interfaces
- Class Declaration: A class can implement an interface. For example:
class TestClass implements InterfaceName {}
- Creating Objects: You can create instances of classes that implement interfaces.
- Class Hierarchies: Classes can extend other classes (like abstract classes) while also implementing interfaces, thus building complex hierarchies that support both inheritance and interface implementations.
Summary of Interactions and Structures
- Test Example: Given classes like
FinalExam, GradedActivity, and an interface like Relatable, the class structure designates the relationship and method implementation between various components.- FinalExam inherits from
GradedActivity, which implements Relatable, showing a clear example of class interfacing in action.
Key Points to Remember
- Interface Characteristics: Must have public methods and no method bodies, only method signatures.
- Class Inheritance: Java allows classes to inherit attributes and behaviors from other classes, creating clear lines of functionality and specialization.
- Concrete Methods: Mentioned as methods with a body, which interfaces do not support, enforcing a strict contractual agreement that implementing classes must adhere to.
Conclusion
- Interfaces are fundamental for object-oriented programming in Java, facilitating abstraction, reducing coupling, and addressing the multiple inheritance challenge. Understanding how to implement and use interfaces effectively will enhance overall programming competency in Java.