The Protected access specifier is visible within the same package and also visible in the subclass whereas the Default is a package level access specifier and it can be visible in the same package.
Protected Access Specifier
- Protected will acts as public within the same package and acts as private outside the package.
- Protected will also act as public outside the package only with respect to subclass objects.
- Protected fields or methods cannot be used for classes and Interfaces.
- The Fields, methods, and constructors declared as protected in a superclass can be accessed only by subclasses in other packages.
- The classes in the same package can also access protected fields, methods and constructors as well, even if they are not a subclass of the protected member’s class.
Example
public class ProtectedTest {
// variables that are protected
protected int age = 30;
protected String name = "Adithya";
/**
* This method is declared as protected.
*/
protected String getInfo() {
return name +" is "+ age +" years old.";
}
public static void main(String[] args) {
System.out.println(new ProtectedTest().getInfo());
}
}Output
Adithya is 30 years old.
Default Access Specifier
- Any member of a class mentioned without any access specifier then it is considered that as Default.
- The Default will act as public within the same package and acts as private outside the package.
- The Default members of any class can be available to anything within the same package and can not be available outside the package under any condition.
- The Default restricts the access only to package level, even after extending the class having default data members we cannot able to access.
Example
public class DefaultTest {
// variables that have no access modifier
int age = 25;
String name = "Jai";
/**
* This method is declared with default aacees specifier
*/
String getInfo() {
return name +" is "+ age +" years old.";
}
public static void main(String[] args) {
System.out.println(new DefaultTest().getInfo());
}
}Output
Jai is 25 years old.