OOP
Modifiers
public
Các thuộc tính và phương thức public có thể được truy cập từ bất cứ đâu
package mypackage;
public class Animal {
public String name = "Dog"; // Biến public có thể truy cập từ bất kỳ đâu
public void makeSound() { // Phương thức public có thể gọi từ bất kỳ class nào
System.out.println("Woof! Woof!");
}
}
// Class khác có thể truy cập biến và phương thức `public`
package anotherpackage;
import mypackage.Animal;
public class Main {
public static void main(String[] args) {
Animal a = new Animal();
System.out.println(a.name); // ✅ Truy cập được biến public
a.makeSound(); // ✅ Gọi được phương thức public
}
}
protected
Các thuộc tính và phương thức protected chỉ có thể được truy cập từ trong cùng 1 package hoặc subclass từ package khác
package animals;
public class Animal {
protected String name = "Lion"; // ✅ Có thể truy cập từ subclass
protected void makeSound() { // ✅ Có thể gọi từ subclass
System.out.println("Roar!");
}
}
// Class con ở package khác
package main;
import animals.Animal;
class Dog extends Animal {
void show() {
System.out.println(name); // ✅ Truy cập được biến protected từ class cha
makeSound(); // ✅ Gọi được phương thức protected
}
}
public class Main {
public static void main(String[] args) {
Dog d = new Dog();
d.show(); // ✅ Truy cập được vì Dog kế thừa Animal
}
}
default
Chỉ có thể truy cập trong cùng một package
package animals;
class Animal { // Không khai báo "public" -> phạm vi default
String name = "Elephant"; // ✅ Chỉ có thể truy cập từ cùng package
void makeSound() { // ✅ Chỉ có thể gọi từ cùng package
System.out.println("Trumpet sound!");
}
}
// Class khác trong cùng package có thể truy cập biến & phương thức default
package animals;
public class Main {
public static void main(String[] args) {
Animal a = new Animal(); // ✅ Truy cập được vì cùng package
System.out.println(a.name);
a.makeSound();
}
}
// ❌ Nếu Main.java nằm trong package khác thì không thể truy cập Animal.
private
Chỉ có thể truy cập trong chính class đó
package mypackage;
public class Animal {
private String name = "Cat"; // ❌ Không thể truy cập từ bên ngoài class
private void makeSound() { // ❌ Không thể gọi từ class khác
System.out.println("Meow! Meow!");
}
// Tạo phương thức public để truy cập biến private
public void showName() {
System.out.println("Animal: " + name);
makeSound(); // ✅ Gọi được phương thức private từ trong class
}
}
public class Main {
public static void main(String[] args) {
Animal a = new Animal();
// System.out.println(a.name); // ❌ Lỗi! Không thể truy cập biến private
// a.makeSound(); // ❌ Lỗi! Không thể gọi phương thức private
a.showName(); // ✅ Gọi được vì showName() là public
}
}