Nạp chồng – Overloading :
Khái niệm
Tương tự như khái niệm nạp chồng phương thức trong C++, trong java, nạp chồng phương thức (overloading method) là hiện tượng nhiều phương thức có cùng tên, tuy nhiên số lượng tham số hoặc kiểu của tham số trong các phương thức này là khác nhau.
Chú ý: Các phương thức có cùng tên, cùng danh sách tham số, tuy nhiên, kiểu trả về khác nhau không được xem là hiện tượng overload.
- các phương thức nằm trong cùng 1 lớp , có cùng tên với nhau nhưng có danh sách đối số khác nhau được gọi là các phương thức nạp chồng.
- Hàm tạo cũng có thể được nạp chồng.
- Tùy theo ta gọi đối số thế nào mà nó sẽ gọi hàm tương ứng.
- Nạp chồng là hình thức đa hình (polymorphism) trong quá trình biên dịch (compile time).
VD : lớp con người và lớp con chó kế thừa từ lớp động vật có vú , phương thức sủa sẽ bị nạp chồng tùy vào đối số mà ta đưa vào;PHP:class DongVatCoVu{
protected String ten;
protected Int tuoi;
}
class ConCho extends DongVatCoVu{
String maulong;
String giong;
// phương thức sủa số 1
void sua()
{
System.out.print(“Sủa 1 lần”);
}
// phương thức sủa số 2
void sua(int n)
{
for(int i=0;i<n;i++)
System.out.print(“Sủa n lần”);
}
class ConNguoi extends DongVatcoVu{
String mauda;
String maumat;
// phương thức nói chuyện số 1
void noichuyen()
{
System.out.print(“Hello”);
}
// phương thức nói chuyện số 2
void noichuyen(int n)
{
for(int i=0;i<n;i++)
System.out.print(“Hello”);
}
}
class main
{
public static void main (String [] args)
{
// khởi tạo đối tượng a từ lớp con chó
ConCho a = new ConCho();
a.ten = “BEN”;
a.tuoi= 2;
a.maulong=”Mau Den”;
a.giong = “BecGie”;
a.sua(); // ở đây ko truyền đối số cho phương thức sủa nên nó sẽ gọi đến phương thức sủa số 1
a.sua(5); // ở đây truyền số 5 cho phương thức sủa nên nó sẽ gọi đến phương thức sủa số 2
// khởi tạo đối tượng b từ lớp con người
ConNguoi b = new ConNguoi();
b.ten = “Nguyen Anh Tuan”;
b.tuoi = 22;
b.mauda =”mau vang”;
b.maumat=”mau den”;
b.noichuyen(); // gọi đến phương thức nói chuyện số 1
b.noichuyen(5); // gọi đến phương thức nói chuyện số 2
}
}
}
Ghi đè – override :
Khái niệm và đặc điểm
Override là hiện tượng một phương thức thuộc lớp cha được định nghĩa lại ở lớp con.
Đặc điểm:
- Phương thức override và được override phải có chung kiểu trả về, tên phương thức và danh sách tham số.
- Override chỉ xảy ra giữa các lớp có quan hệ kế thừa.
- Một phương thức ở lớp cha được override ở lớp con thì phương thức override ở lớp con không được phép thu hẹp tầm vực của phương thức đó ở lớp cha.
- Phương thức ở lớp cha được override ở lớp con thì phương thức override ở lớp con không được phép phát sinh những ngoại lệ kiểm tra (checked exception) khác loại hoặc không có quan hệ kế thừa với các ngoại lệ được ném ra từ phương thức đó ở lớp cha.
- Sử dụng từ khóa super để gọi phương thức được override ở lớp cha tại phương thức override ở lớp con.
- là Phương thức đã xuất hiện ở lớp cha và xuất hiện tiếp ở lớp con.
- Khi đối tượng thuộc lớp con gọi phương thức thì sẽ chọn lựa và chạy theo phương thức trong lớp con.
- Nếu lớp con không có phương thức đó thì mới lên kiếm ở lớp cha để chạy
- Ghi đè là hình thức đa hình (polymorphism) trong quá trình thực thi (Runtime)
VD :PHP:class DongVatCoVu{
protected String ten;
protected int tuoi;
protected void chay() //phương thức chạy ở lớp cha
{
System.out.println("Chay bang 4 chan !");
}
}
class ConCho extends DongVatCoVu{ // lớp con chó hoàn toàn ko có phương thức chạy nên nó sẽ kiếm phương thức chạy từ lớp cha để chạy
String giong;
String maulong;
protected void sua(int n)
{
for(int i=0;i<n;i++)
System.out.println("Gau gau");
}
}
class ConNguoi extends DongVatCoVu{
String diachi;
protected void noichuyen(int n)
{
for(int i=0;i<n;i++)
System.out.println("Hello");
}
protected void chay() // phương thức chạy ở lớp con người
{
System.out.println("Chay bang 2 chan !");
}
}
public class Main {
public static void main(String[] args) {
ConCho a = new ConCho();
a.ten="Ki";
a.tuoi=2;
a.giong="Becgie";
a.maulong="Vang";
a.sua(5);
a.chay(); // gọi phương thức chạy
ConNguoi b = new ConNguoi();
b.ten="Tuan";
b.tuoi=22;
b.diachi="240 Tran Duy Hung";
b.noichuyen(3);
b.chay(); // gọi phương thức chạy
}
}
ở ví dụ trên, lớp con chó ko có phương thức chạy, nó sẽ được lấy ở lớp cha để chạy, còn lớp con người có phương thức chạy, nó sẽ gọi phương thức chạy ở lớp con người .
- Nhận đường liên kết
- X
- Ứng dụng khác
Nhãn
Java
Nhãn:
Java
- Nhận đường liên kết
- X
- Ứng dụng khác
Nhận xét
Đăng nhận xét