What access specifier members can be used in child classes of other packages?
Access levels affect you in two ways. First, when you use classes that come from another source, such as the classes in the Java platform, access levels determine which members of those classes your classes can use. Second, when you write a class, you need to decide what access level every member variable and every method in your class should have. One way of thinking about access levels is in terms of the API: access levels directly affect the public API of a class and determine which members of the class can be used by other classes. You need to put as much effort into deciding the access level for a member as you put into making other decisions about your class's API, such as naming methods. Show
Let's look at a collection of classes and see access levels in action. The following figure shows the four classes that comprise this example and how they are related. Access modifiers are keywords that can be used to control the visibility of fields, methods, and constructors in a class. The four access modifiers in Java are public, protected, default, and private. Four Types of Access Modifiers
For a refresher, check out this free course on Java programming. On completion, you will also earn a certificate which is sure to put you ahead in the competitive space. Must Learn Java ConceptsJava Java Algorithms Java Data Structures JDBC In Java OOPs In Java Java Basic Programs Let us see which all members of Java can be assigned with the access modifiers: Now let us understand the scope of these access modifiers with the help of a table: Let’s understand with more details: Also, check Top Java Interview Questions and Answers for Freshers Private Access Modifier
Let us consider an example where we will consider two classes A1 and A2 within the same package p1. We will declare a variable and a method as private in class A1 and then try to access these methods and variables from class A2. So here we will Compile Time Error. Let us see for a private constructor: If we make any class constructor private, we cannot create the instance of that class from outside the class, and hence, from here we can conclude that the private access modifier can be accessed only within the same class and not from outside the class. Default Access Modifier
Let us consider an example for the default access modifier. When we try to access these variables and methods from outside the package we get a Compile time error. Hence, we conclude that the default access modifier members can be accessed only within the same package and cannot be accessed from outside the package. And they have more visibility than private access modifier but is more restricted than protected and public access modifiers. Protected Access Modifier
Let us consider an example for a protected access modifier. Here we have two packages p1 and p2. In package p1 we have class A1 where we have declared a protected test method. In package p2 we are inheriting the members of class A1 inside class A2 with help of extending keywords and creating a relationship between the two classes. We can also say that class A1 is the parent class or the superclass and class A2 is the child class or the subclass respectively. When we inherit the members of class A1 inside class A2, with the help of a protected access modifier we can access the members of class A1 of package p1 from class A2 of the different package p2. So here we get the output as Hi I’m from a protected method. Hence, we can conclude that the methods, variables, and data members of a class prefixed with a protected access modifier can be accessed within the same package as well as can be accessed from outside the package but only with the help of inheritance. Public Access ModifierIt is a keyword. If a class member like variable, method, or data members are prefixed with a public access modifier, then they can be accessed from anywhere inside the program. That is, they can be accessed within the same class as well as from outside the different classes. It also includes access within the same package and also from outside the package. The members like variables, methods, and other data members can be accessed globally. Using public access modifiers we can provide access to the members most simply. There are no restrictions on public access modifier members. Hence, it has the widest accessibility or visibility scope as compared to the rest of the access modifiers. Let us now consider an example of public access modifier. Here in this example, we have two different packages p1 and p2. In p1 we have a class a1 where we have declared a variable and a method prefixed public keyword. And in the p2 package, we have a class A2 from where we are trying to access the members of class A1 without inheritance. Here we get the output as 10 and Hi I’m from the public method. So from the above example, we can conclude that public access modifier members can be accessed from anywhere, within the same class as well as from outside the class. And also can be accessed within the same package and also from outside a package. NOTE: If any other developer is using your class, then try to use the most restricted access modifier. And also try to use a private access modifier, wherever necessary. An overall accessibility: private When overriding a method, the method which is overridden should not be restrictive. For example: In the above example, the test method is been overridden in class A2. But the subclass method should have the same visibility or more visibility than the superclass method. Since the subclass method has less scope than the superclass method, we get a compile-time error. |