Skip to main content

Importing Packages

  • If you want to access one class from another class within the same package, then you can access directly without using any package name.

Hello.java

package com.javaindia.p1;

class Hello {

void show() {
System.out.println("Hello -> show()");
}
}

class Hai {

void display() {
System.out.println("Hai -> display()");
}
}

Lab460.java

package com.javaindia.p1;

public class Lab460 {

public static void main(String args[]) {
Hello hello = new Hello();
hello.show();

Hai hai = new Hai();
hai.display();
}
}

✅ Can access directly because both classes are in the same package.

If you want to access a class from a different package then:

  1. That class must be public.
  2. That package must be available in the classpath.
  3. That package information must be specified.

Quick Summary

RuleDescription
Package statement positionMust be the first statement
Number of package statementsOnly one allowed
Public classes in one fileOnly one public class allowed
File name ruleFile name must match public class name
Same package accessDirect access possible
Different package accessUse public class + classpath + package name

Accessing Classes from Another Package

You can specify the package information in two ways:

  1. Using Fully Qualified Class Name (<package Name>.<class Name>)
  2. Using Import Statements

Hello.java

package com.javaindia.p1;

public class Hello {

public void show() {
System.out.println("Hello -> show()");
}

static {
System.out.println("Hello -> S.B");
}
}

Hai.java

package com.javaindia.p1;

public class Hai {

public void display() {
System.out.println("Hai -> display()");
}

static {
System.out.println("Hai -> S.B");
}
}

Lab461.java

package com.javaindia.p2;

public class Lab461 {

public static void main(String args[]) {
Hello hello = new Hello();
hello.show();

Hai hai = new Hai();
hai.display();
}
}

❌ Cannot access directly because Hello and Hai belong to another package (com.javaindia.p1).

Using Fully Qualified Class Name

  • When you want to access any class from any package, refer to the class with the package name.

Example

com.javaindia.p1.Hai
com.javaindia.p1.Hello

Lab462.java

package com.javaindia.p2;

public class Lab462 {

public static void main(String args[]) {
com.javaindia.p1.Hello hello = new com.javaindia.p1.Hello();

hello.show();

com.javaindia.p1.Hai hai = new com.javaindia.p1.Hai();

hai.display();
}
}

✅ Possible using Fully Qualified Class Name.

Package Structure

Key Points

ConceptDescription
Same package accessDirect access possible
Different package accessUse package name or import
Fully Qualified Namepackage Name.class Name
RequirementClass must be public
Package examplecom.javaindia.p1.Hello

Using Import Statements

  • import statement allows you to access the classes from other package s.

Syntax

1) Single Type Import Statement

import <package Name>.<class/int erfaceName>;

Example

import com.javaindia.p1.Hai;
import com.javaindia.p1.Hello;
  • In the first case, only the Hello class of p1 package will be accessed.
  • In the second case, only the Hai class of p1 package will be accessed.

2) Multi Type Import Statement

import <package Name>.*;

Example

import com.javaindia.p1.*;
  • In this case, all classes of package p1 can be accessed.

Lab463.java

package com.javaindia.p2;

import com.javaindia.p1.Hai;
import com.javaindia.p1.Hello;

public class Lab463 {

public static void main(String args[]) {
Hello hello = new Hello();
hello.show();

Hai hai = new Hai();
hai.display();
}
}

✅ Both public classes can be accessed using single type import.

Lab464.java

package com.javaindia.p2;

import com.javaindia.p1.*;

public class Lab464 {

public static void main(String args[]) {
Hello hello = new Hello();
hello.show();

Hai hai = new Hai();
hai.display();
}
}

✅ Possible using multi type import statement.

Lab465.java

package com.javaindia.p2;

import com.javaindia.p1.*;

public class Lab465 {

public static void main(String args[]) {
Hello hello = new Hello();

Hai hai = null;
}
}

A.java

package com.javaindia.p1;

public class A {

static {
System.out.println("com.javaindia.p1.A -> S.B");
}
}

B.java

package com.javaindia.p1;

public class B {

static {
System.out.println("com.javaindia.p1.B -> S.B");
}
}

Import Types Overview

Important Notes

Import TypeMeaning
Single Type ImportImports one specific class/interface
Multi Type ImportImports all accessible classes from package
*Imports classes only, not sub-package s
RequirementClasses must be public for outside package access

Hello.java

package com.javaindia.p1;

public class Hello {

static {
System.out.println("com.javaindia.p1.Hello -> S.B");
}
}

X.java

package com.javaindia.p2;

public class X {

static {
System.out.println("com.javaindia.p2.X -> S.B");
}
}

Y.java

package com.javaindia.p2;

public class Y {

static {
System.out.println("com.javaindia.p2.Y -> S.B");
}
}

Hello.java (in p2 package)

package com.javaindia.p2;

public class Hello {

static {
System.out.println("com.javaindia.p2.Hello -> S.B");
}
}

Lab466.java

package com.javaindia.p3;

import com.javaindia.p1.*;
import com.javaindia.p2.*;

public class Lab466 {

public static void main(String args[]) {
new A();
new B();
new X();
new Y();
}
}

✅ Possible

Lab467.java

package com.javaindia.p3;

import com.javaindia.p1.*;
import com.javaindia.p2.*;

public class Lab467 {

public static void main(String args[]) {
new Hello();
}
}

❌ Ambiguity problem

Both p1 and p2 contain Hello class.

Lab468.java

package com.javaindia.p3;

import com.javaindia.p1.Hello;
import com.javaindia.p2.Hello;

public class Lab468 {

public static void main(String args[]) {
new Hello();
}
}

❌ Error

Same class name imported from two different package s.

Lab469.java

package com.javaindia.p3;

import com.javaindia.p1.Hello;

public class Lab469 {

public static void main(String args[]) {
new Hello();
}
}

✅ Possible

Accesses Hello from package p1.

Lab470.java

package com.javaindia.p3;

import com.javaindia.p1.Hello;

public class Lab470 {

public static void main(String args[]) {
new Hello();

new com.javaindia.p2.Hello();

new com.javaindia.p1.Hello();
}
}

✅ Possible using Fully Qualified Class Name.

Lab471.java

package com.javaindia.p3;

import com.javaindia.p2.Hello;

public class Lab471 {

public static void main(String args[]) {
new Hello();

new com.javaindia.p2.Hello();

new com.javaindia.p1.Hello();
}
}

✅ Possible

Imported class is from p2, and another package class is accessed using fully qualified name.

Understanding Ambiguity

Key Concepts

ScenarioResult
Same class name in different package sPossible
Import both same-name classes❌ Ambiguity
Use fully qualified name✅ Resolves conflict
Single import + fully qualified name✅ Valid

Important Point

When two package s contain classes with the same name:

  • Import only one class directly.
  • Access the other class using the Fully Qualified Class Name.

Example:

new com.javaindia.p1.Hello();
new com.javaindia.p2.Hello();