C

Core Java tutorial for beginners

Clean • Professional

Java – Sub-Packages (Organizing Classes Effectively)

3 minute

Sub-Packages in Java

In Java, sub-packages help organize your code in a hierarchical structure. They allow developers to manage large projects efficiently by grouping related classes and interfaces under a main package.

For example :

com.myapp.utils
com.myapp.models
com.myapp.controllers
  • com.myapp → main package
  • utils, models, controllers → sub-packages

Sub-packages make your code modular, reusable, and easy to maintain.


What is a Sub-Package?

A sub-package is a package nested inside another package.

  • It can contain classes, interfaces, and even other sub-packages.
  • Each sub-package has its own namespace, which prevents naming conflicts.

Example of Sub-Packages:

com.company.project
com.company.project.utils
com.company.project.models
com.company.project.controllers

Creating a Sub-Package

learn code with durgesh images

Step 1: Declare the Sub-Package

At the top of your Java file, write the package statement:

// File: com/company/project/utils/Helper.java
package com.company.project.utils;

public class Helper {
    public static void show() {
        System.out.println("Hello from sub-package!");
    }
}

Folder structure must match package name:

com/
 └── company/
     └── project/
         └── utils/
             └── Helper.java

Step 2: Compile the Sub-Package Class

Use javac -d to compile while preserving the folder structure:

javac -d . com/company/project/utils/Helper.java

Step 3: Import Sub-Package in Another Class

// File: Main.java
import com.company.project.utils.Helper;

public class Main {
    public static void main(String[] args) {
        Helper.show();
    }
}

Run:

java Main

Output:

Hello from sub-package!

Accessing Classes in Sub-Packages

learn code with durgesh images

1. Single Class Import

import com.company.project.utils.Helper;

2. Import All Classes in Sub-Package

import com.company.project.utils.*;

3. Fully Qualified Name (No import)

com.company.project.utils.Helper.show();

Best Practices

  • Keep the package hierarchy simple and logical.
  • Name sub-packages by functional modules (e.g., models, controllers, services).
  • Avoid deep nesting beyond 3–4 levels to maintain readability.
  • Use access modifiers wisely — public classes are accessible across packages, default classes are package-private.

Advantages of Sub-Packages

AdvantageDescription
OrganizationGroups related classes together
Avoid Naming ConflictsEach sub-package has its own namespace
ReusabilityClasses can be reused in multiple projects
ModularityEasy maintenance for large projects

Common Mistakes

MistakeProblem
Folder name mismatchCompiler throws “package does not exist”
Missing package statementClass belongs to default package
Wrong importClass cannot be accessed

FAQs

Q1: Can sub-packages access parent package classes without import?

No. You must import the class explicitly or use the fully qualified name.

Q2: Can sub-packages have their own sub-packages?

Yes, sub-packages can be nested multiple levels deep.

Q3: Are sub-packages automatically visible to the parent package?

No. Java treats each package/sub-package as a separate namespace. Access depends on public modifier.

Article 0 of 0