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:
- That class must be
public. - That package must be available in the
classpath. - That package information must be specified.
Quick Summary
| Rule | Description |
|---|---|
| Package statement position | Must be the first statement |
| Number of package statements | Only one allowed |
| Public classes in one file | Only one public class allowed |
| File name rule | File name must match public class name |
| Same package access | Direct access possible |
| Different package access | Use public class + classpath + package name |
Accessing Classes from Another Package
You can specify the package information in two ways:
- Using Fully Qualified Class Name (
<package Name>.<class Name>) - 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
HelloandHaibelong 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
| Concept | Description |
|---|---|
| Same package access | Direct access possible |
| Different package access | Use package name or import |
| Fully Qualified Name | package Name.class Name |
| Requirement | Class must be public |
| Package example | com.javaindia.p1.Hello |
Using Import Statements
importstatement 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
Helloclass ofp1package will be accessed. - In the second case, only the
Haiclass ofp1package will be accessed.
2) Multi Type Import Statement
import <package Name>.*;
Example
import com.javaindia.p1.*;
- In this case, all classes of package
p1can 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 Type | Meaning |
|---|---|
| Single Type Import | Imports one specific class/interface |
| Multi Type Import | Imports all accessible classes from package |
* | Imports classes only, not sub-package s |
| Requirement | Classes 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
p1andp2containHelloclass.
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
Hellofrom packagep1.
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
| Scenario | Result |
|---|---|
| Same class name in different package s | Possible |
| 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();