Fully Qualified Name: It is used to access a class by specifying complete path. We can replace ‘import’ with fully qualified name. To work with any class in java application, either we use ‘import’ statement or ‘fully qualified name’.
Advantage of Fully Qualified Name:
- The main advantage of packages is ‘Avoiding collisions between class names’.
- In Java application, we can define more than one class with the same identity only by using packages.
- ‘Fully Qualified Name’ is useful while accessing duplicate classes from different packages.
A.java:
package p1;
public class A
{
public static void fun()
{
System.out.println("p1.A class fun");
}
}
B.java:
package p1;
public class B
{
public static void fun()
{
System.out.println("p1.B class fun");
}
}
Class file locations we can see as follows:
A.java:
package p2;
public class A
{
public static void fun()
{
System.out.println("p2.A class fun");
}
}
C.java:
package p2;
public class C
{
public static void fun()
{
System.out.println("p2.C class fun");
}
}
Accessing the above 2 packages and classes:
package nit;
import p1.*;
import p2.*;
class Access
{
public static void main(String[] args)
{
System.out.println("nit.Access class main...");
B.fun();
C.fun();
}
}
When we try to access duplicate classes from different packages:
package nit;
import p1.*;
import p2.*;
class Access
{
public static void main(String[] args)
{
A.fun(); // ‘A’ is present in both packages.
}
}
We access the duplicate classes from different packages using fully qualified name:
package nit;
class Access
{
public static void main(String[] args)
{
p1.A.fun();
p2.A.fun();
}
}
User defined System class:
We can define a class using API class identity. We can access user class as well as API class using Fully Qualified Name if their names are duplicated.
Class loader sub system:
‘Class Loader Sub System’ is a program which is responsible for loading classes into JVM. It gives the first priority to Current Working Directory and then it searches in the API to load the class.
We need to access java.lang.System class using fully qualified name to work with ‘out’ object.
class System
{
public static void main(String args[ ])
{
java.lang.System.out.println("Hello.....");
}
}
User defined String class:
We need to specify java.lang.String class to avoid error:
class String
{
public static void main(java.lang.String[] args)
{
System.out.println("Hello World!");
}
}