🎥 Video minh họa nguồn: YTB Code Thu
VIDEO
1) Method Overloading
Cùng tên method, khác tham số
Xảy ra trong cùng một class
Compile-time polymorphism
public class Calculator {
// Cộng 2 số nguyên
public int add (int a, int b) {
return a + b;
}
// Cộng 3 số nguyên
public int add (int a, int b, int c) {
return a + b + c;
}
// Cộng 2 số thực
public double add (double a, double b) {
return a + b;
}
}
2) Method Overriding
Ghi đè method của class cha
Cùng tên, cùng tham số
Runtime polymorphism
class Animal {
public void makeSound () {
System.out .println ("Some sound" );
}
}
class Dog extends Animal {
@Override
public void makeSound () {
System.out .println ("Woof!" );
}
}
class Cat extends Animal {
@Override
public void makeSound () {
System.out .println ("Meow!" );
}
}
3) Quy tắc quan trọng
3.1. Overloading Rules
Khác số lượng tham số
void print (int a)
void print (int a, int b)
Khác kiểu tham số
void print (int a)
void print (String a)
Khác thứ tự tham số
void print (int a, String b)
void print (String b, int a)
3.2. Overriding Rules
Method phải có cùng tên và tham số
Return type phải giống hoặc là subtype
Access modifier không được hẹp hơn
Không override static methods
class Parent {
public Number calculate () { return 0; }
}
class Child extends Parent {
@Override
public Integer calculate () { return 42; } // OK vì Integer extends Number
}
4) So sánh Overloading vs Overriding
Overloading
Cùng class
Khác tham số
Compile-time
Không cần kế thừa
Không dùng @Override
Overriding
Class cha-con
Cùng tham số
Runtime
Cần kế thừa
Dùng @Override
5) Best Practices
Overloading
Đặt tên method rõ ràng
Không lạm dụng overload
Tham số phải có ý nghĩa khác nhau
Overriding
Luôn dùng @Override
Không thay đổi hành vi cốt lõi
Gọi super khi cần
Giữ nguyên contract của method