Unit 5: Writing Classes

Understanding Visibility Modifiers in Java

Introduction to Visibility Modifiers

Java, as an object-oriented language, emphasizes encapsulation — one of its four foundational pillars. Visibility modifiers play a crucial role in this regard, determining the scope and accessibility of classes, variables, methods, and constructors. By mastering these modifiers, developers can ensure data integrity, encapsulation, and controlled interactions between objects.


The Realm of Visibility Modifiers

Public Modifier

When an attribute or method is marked as public, it means it can be accessed from any other class, irrespective of the package the classes belong to.

Example:

public class Animal {
    public String species;
}

Private Modifier

Attributes or methods marked as private can only be accessed within the class they are declared in.

Example:

public class Person {
    private String ssn;  // Social Security Number
}

Protected Modifier

The protected modifier allows an attribute or method to be accessed within its own package and by subclasses, even if they're in different packages.

Example:

protected class Forest {
    protected int treeCount;
}

Default (Package-Private) Modifier

If no modifier is specified, then by default the attribute or method will have "package-private" visibility. This means it can only be accessed within its own package.

Example:

class Village {
    int villagerCount;
}

Strategic Encapsulation

Visibility modifiers aren't just about restriction; they're tools to implement strategic encapsulation. By choosing the right modifier, developers ensure that only intended interactions happen with their objects, preserving data integrity.

A Common Misconception

It's a common misconception that protected offers broader access than public since "protected" sounds more open than "public". Remember: public is the most permissive modifier, while protected restricts access to the same package and subclasses.


Summary

Visibility modifiers in Java help implement encapsulation by controlling access to classes, attributes, and methods. By thoughtfully choosing the right modifier - public, private, protected, or default, AP CSA students can architect their code to be more robust, maintainable, and secure. It is essential to grasp these concepts firmly to master object-oriented principles in Java.


References


AP CSA Homework Assignment

Assignment: Exploring Visibility Modifiers in Java

Instructions

  1. Create a Java project with two packages named alpha and beta.
  2. In the alpha package:
    • Create a class named AlphaClass with attributes and methods with all four visibility modifiers.
  3. In the beta package:
    • Create a class named BetaClass and try to access attributes and methods of AlphaClass.
  4. Document your observations on which attributes and methods were accessible and which were not.
  5. Modify the BetaClass to be a subclass of AlphaClass and again document your observations.
Previous
Instance vs Class Variables