Clean • Professional
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 packageutils, models, controllers → sub-packagesSub-packages make your code modular, reusable, and easy to maintain.
A sub-package is a package nested inside another package.
Example of Sub-Packages:
com.company.project
com.company.project.utils
com.company.project.models
com.company.project.controllers

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
Use javac -d to compile while preserving the folder structure:
javac -d . com/company/project/utils/Helper.java
// 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!

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();
models, controllers, services).public classes are accessible across packages, default classes are package-private.| Advantage | Description |
|---|---|
| Organization | Groups related classes together |
| Avoid Naming Conflicts | Each sub-package has its own namespace |
| Reusability | Classes can be reused in multiple projects |
| Modularity | Easy maintenance for large projects |
| Mistake | Problem |
|---|---|
| Folder name mismatch | Compiler throws “package does not exist” |
| Missing package statement | Class belongs to default package |
| Wrong import | Class cannot be accessed |
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.