Java Access Modifiers: Control Visibility in Classes and Inheritance

📘 Java Learning – Access Modifiers (Member Modifiers) While strengthening my Core Java fundamentals, I explored how member-level access modifiers control the visibility of variables and methods across classes, packages, and inheritance. Here are my key learnings 👇 1️⃣ public Members If a member is declared as public, it can be accessed from anywhere only if the corresponding class is also visible (public). 📌 Class visibility is checked first, then member visibility. 🧪 Example: // package p1 class A { // not public public void m1() { System.out.println("Hello"); } } // package p2 A a = new A(); // ❌ Compile-time error a.m1(); 📌 Even though m1() is public, it cannot be accessed because class A is not public. 2️⃣ Default (No Modifier) Members If a member has no access modifier, it is accessible only within the same package. 📌 Hence, default access is also called package-level access. 🧪 Example: // package p1 class Test { void m1() { } } // package p2 Test t = new Test(); t.m1(); // ❌ Not accessible 3️⃣ private Members If a member is declared as private, it is accessible only within the same class. 📌 Private members are not visible to child classes. 📌 Therefore, private + abstract is an illegal combination, because: • Abstract methods must be implemented by child classes • Private methods are not visible to child classes 🧪 Example: class A { private void m1() { } } class B extends A { // m1() not visible here } 4️⃣ protected Members If a member is declared as protected: • Accessible anywhere within the same package • Accessible outside the package only in child classes 📌 Important Rule: • Inside the same package → accessible via parent or child reference • Outside the package → accessible only via child reference 🧪 Example: // package p1 public class A { protected void m1() { } } // package p2 public class B extends A { void test() { m1(); // ✅ valid } } A a = new A(); a.m1(); // ❌ Compile-time error (outside package, parent reference) ⭐ Key Takeaways • Class visibility is checked before member visibility • Default access = package-level access • Private members are class-specific only • Protected supports controlled inheritance access Understanding member access modifiers is essential for writing secure, well-encapsulated, and maintainable Java applications. Building strong OOP foundations, one concept at a time 🚀 #Java #CoreJava #AccessModifiers #OOP #JavaInternals #JavaFullStack #BackendDeveloper #LearningJourney

To view or add a comment, sign in

Explore content categories