this= "chính tôi" — reference đến object hiện tại.super= "phiên bản parent" — truy cập member cha đã bị override/che.
java
class Animal {
String name;
Animal(String name) { this.name = name; }
void describe() { System.out.println("Animal: " + name); }
}
class Dog extends Animal {
String breed;
Dog(String name, String breed) {
super(name); // gọi constructor parent — phải đứng ĐẦU
this.breed = breed; // phân biệt field this.breed với param breed
}
@Override
void describe() {
super.describe(); // gọi version Animal
System.out.println("Breed: " + breed);
}
}this dùng cho: phân biệt field/param trùng tên, gọi constructor khác cùng class this(...), truyền chính object (register(this)), method chaining (return this).
super dùng cho: gọi constructor cha super(...), gọi method bị override (super.toString()).
Quy tắc cứng: this(...) và super(...) đều phải là câu lệnh đầu tiên trong constructor → không gọi được cả hai. Không có thì compiler ngầm chèn super().
this/super không tồn tại trong static method.