-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAccessModifiers.java
More file actions
129 lines (108 loc) · 4.2 KB
/
Copy pathAccessModifiers.java
File metadata and controls
129 lines (108 loc) · 4.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// Topic: Access Modifiers in Java
// Notes reference: 13-access-modifiers.md
// ===========================
// PRIVATE Access Modifier
// ===========================
// Accessible ONLY within the class it is declared in.
// Enforces encapsulation.
class Person {
private String name; // private — not accessible outside Person class
private int age;
// Public constructor
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter — provides READ access to private variable
public String getName() {
return name;
}
// Setter — provides WRITE access to private variable
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void displayInfo() {
// Inside the same class — private is accessible
System.out.println("Name: " + name + ", Age: " + age);
}
}
// ===========================
// DEFAULT (package-private)
// ===========================
// No keyword used. Accessible within the SAME PACKAGE only.
// Even after importing, another package cannot access it.
class DefaultExample {
int value = 42; // default access — no modifier keyword
void display() {
System.out.println("Default access value: " + value);
}
}
// ===========================
// PROTECTED Access Modifier
// ===========================
// Accessible within same package AND in subclasses of different packages
class Vehicle {
protected int speed;
protected void showSpeed() {
System.out.println("Speed: " + speed);
}
}
// Subclass in same package — can access protected
class Bike extends Vehicle {
void accelerate() {
speed = 100; // allowed: subclass in different package still allowed
showSpeed();
}
}
// ===========================
// PUBLIC Access Modifier
// ===========================
// Accessible from EVERYWHERE in the program — no restrictions
class MathUtils {
public static int add(int a, int b) {
return a + b;
}
public static double circleArea(double radius) {
return Math.PI * radius * radius;
}
}
// ===========================
// MAIN DEMO CLASS
// ===========================
public class AccessModifiers {
public static void main(String[] args) {
System.out.println("=== Private Access ===");
Person p = new Person("Alice", 25);
// p.name = "Bob"; // ERROR! name has private access
p.setName("Bob"); // OK — public setter
System.out.println("Name via getter: " + p.getName()); // Bob
System.out.println("Age via getter: " + p.getAge()); // 25
p.displayInfo(); // OK — displayInfo() is public
System.out.println("\n=== Default Access ===");
DefaultExample def = new DefaultExample();
System.out.println("Default value: " + def.value); // accessible — same package
def.display();
System.out.println("\n=== Protected Access ===");
Bike bike = new Bike();
bike.accelerate();
// bike.speed = 200; // accessible (same package), but not recommended directly
System.out.println("\n=== Public Access ===");
// Accessible from anywhere, no object needed for static
System.out.println("add(5, 10) = " + MathUtils.add(5, 10));
System.out.println("circleArea(5) = " + MathUtils.circleArea(5));
// ===========================
// SUMMARY TABLE (printed)
// ===========================
System.out.println("\n=== Access Modifier Summary ===");
System.out.println("Modifier | Same Class | Same Package | Subclass | Everywhere");
System.out.println("------------|------------|--------------|----------|----------");
System.out.println("private | YES | NO | NO | NO");
System.out.println("default | YES | YES | NO* | NO");
System.out.println("protected | YES | YES | YES | NO");
System.out.println("public | YES | YES | YES | YES");
System.out.println("*default accessible in subclass only if in same package");
}
}