Packages and Interfaces

Comprehensive study notes, diagrams, and exam preparation for Packages and Interfaces.

Packages and Interfaces

Definition

Packages and interfaces are two fundamental features in object-oriented programming, especially in Java, that help organize code and define clear rules for how classes should behave.

A package is a namespace that groups related classes, interfaces, and subpackages together. It helps in organizing large programs, avoiding name conflicts, and controlling access to classes and members.

An interface is a contract that specifies a set of methods that a class must implement. It defines what an object should do, not how it should do it. Interfaces support abstraction, multiple inheritance of type, and flexible program design.


Main Content

1. Package Concept

  • A package is used to group related classes and interfaces into a single unit.
  • It improves code organization, readability, reusability, and access control.

A package works like a folder in a file system. Just as files are stored in different folders to keep them organized, classes are stored in packages to make large software projects easier to manage. Packages are especially useful when many developers work on the same project because they separate code into logical modules.

Types of packages

1. Built-in packages

These are provided by the Java API, such as:

  • java.lang for core language classes like String, Math, and System
  • java.util for utility classes like Scanner, ArrayList, and HashMap
  • java.io for input/output handling

2. User-defined packages

These are created by programmers to organize their own classes.

Creating and using a package

A package is declared using the package keyword at the top of a Java file:

package college.department;

public class Student {
    public void display() {
        System.out.println("Student class in college.department package");
    }
}

To use a class from another package, the import statement is used:

import college.department.Student;

public class Test {
    public static void main(String[] args) {
        Student s = new Student();
        s.display();
    }
}

Importance of packages

  • They prevent class name conflicts. For example, two different packages can each have a Student class.
  • They help control access using package-private visibility.
  • They make deployment and maintenance of code easier.

Access control in packages

Packages work closely with access modifiers:

  • public — accessible from anywhere
  • protected — accessible in the same package and in subclasses
  • default (package-private) — accessible only within the same package
  • private — accessible only within the same class

This access control helps in encapsulation and keeps internal implementation details hidden from outside code.


2. Interface Concept

  • An interface defines a set of abstract behaviors that classes must follow.
  • It is used to achieve abstraction and support multiple behavior contracts.

An interface tells a class, “If you want to be of this type, you must provide these methods.” It does not normally contain full implementation details for those methods. This makes interfaces powerful for designing systems where different classes can share the same behavior without being related by inheritance.

Basic syntax of an interface

interface Printable {
    void print();
}

A class implements an interface using the implements keyword:

class Document implements Printable {
    public void print() {
        System.out.println("Printing document...");
    }
}

Key characteristics of interfaces

  • Methods are abstract by default, although modern Java versions also allow default and static methods.
  • Variables are implicitly public static final, meaning they behave like constants.
  • A class can implement multiple interfaces, which allows Java to support multiple inheritance of type.

Example of multiple interface implementation

interface Readable {
    void read();
}

interface Writable {
    void write();
}

class FileHandler implements Readable, Writable {
    public void read() {
        System.out.println("Reading file...");
    }

    public void write() {
        System.out.println("Writing file...");
    }
}

Why interfaces are important

  • They allow different classes to share a common capability.
  • They make programs more flexible because code can depend on an interface rather than a specific class.
  • They support polymorphism, which means the same interface reference can point to objects of different implementing classes.

Real-world analogy

An interface is like a remote control standard. Different devices may work differently internally, but if they support the same buttons and signals, they can all be controlled in a common way.


3. Relationship Between Packages and Interfaces

  • Packages and interfaces are often used together to structure large applications cleanly.
  • Packages organize where code lives, while interfaces define what behavior code must provide.

In professional software development, interfaces are usually placed inside packages along with related classes. This makes the design modular and easy to understand.

Example of using both together

package com.school.system;

public interface Teach {
    void teach();
}
package com.school.system;

public class Teacher implements Teach {
    public void teach() {
        System.out.println("Teaching students...");
    }
}

Here:

  • The package com.school.system groups related code.
  • The interface Teach defines a behavior.
  • The class Teacher implements that behavior.

Benefits of combining them

  • Packages create a logical structure for application modules.
  • Interfaces define standardized behavior inside those modules.
  • The combination supports maintainable, reusable, and scalable software design.

ASCII structure for understanding

Package-based organization:

com.school.system
│
├── Teach.java
├── Teacher.java
├── Student.java
└── Result.java

Interface-driven behavior:

Teach
  |
  |-- implemented by Teacher
  |-- implemented by GuestLecturer

This shows that packages manage organization, while interfaces manage behavior contracts.


Working / Process

1. Declare the package

  • Write the package statement at the top of the source file.
  • Choose a meaningful package name based on project structure or domain, such as com.company.project.

2. Create the interface

  • Define the interface with the interface keyword.
  • Add method declarations that must be implemented by classes.
  • Include constants if needed using public static final values.

3. Implement and use the interface

  • Create classes using the implements keyword.
  • Provide method bodies for all abstract methods.
  • Place related classes in appropriate packages and use import when needed to access them from other packages.

Advantages / Applications

  • Packages improve code organization, prevent naming conflicts, and help manage access to classes and members.
  • Interfaces provide abstraction, enable polymorphism, and allow multiple inheritance of type.
  • Together, they are widely used in large software systems, APIs, frameworks, modular applications, and reusable libraries.

Summary

  • Packages group related classes and interfaces.
  • Interfaces define method rules for classes.
  • Both help build clean, flexible, and reusable programs.
  • Important terms to remember: package, interface, import, implements, abstraction, polymorphism