Lưu Quang Triệu

Không ngừng sáng tạo thì sẽ không sợ bị diệt vong

Overload – override

Posted by millionking on October 23, 2012

Nạp chồng – Overloading :
– 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 :

– 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 .

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: