Polymorphism tính đa hình

Polymorphism (tính đa hình) là một từ ghép từ tiếng Hy Lạp, poly có nghĩa là nhiều, morphism là hình dạng (form). Tính đa hình nghĩa là tồn tại ở nhiều hình dạng. Trong lập trình hướng đối tượng, tính đa hình thể hiện ở cách một đối tượng có thể cư xử bằng nhiều cách khác nhau. Điều này thể hiện rõ qua overload (nạp chồng) và override method (ghi đè).

Có 2 loại đa hình:

  1. Đa hình khi biên dịch (compile time Polymorphism): khi bạn override, overload các phương thức trong lớp con, khi đấy gọi là đa hình biên dịch, trình biên dịch biết khi nào bạn override, overload  phương thức.
  2. Đa hình khi chạy (runtime Polymorphism): khi bạn chạy, bạn có quyền tạo một đối tượng của lớp con từ lớp cha, khi khai báo trình biên dịch chưa biết bạn sẽ sử dụng lớp nào để tạo đối tượng, chỉ khi chạy, nó mới thực sự biết được đối tượng nào được tạo ra.

Ví dụ:

 
class DongVat
{
    public virtual void An()
    {
        Console.WriteLine("Dong vat dang an");
    }
    //overload phương thức Ăn
    public virtual void An(string thucAn)
    {
        Console.WriteLine("dong vat dang an " + thucAn);
    }
}
class Meo:DongVat
{
    //override phương thức ăn
    public override void An()
    {
        base.An();
        Console.WriteLine("meo dang an");
    }

    public override void An(string thucAn)
    {
        Console.WriteLine("meo dang an " + thucAn);
    }
}
static void Main(string[] args)
{
    DongVat meo;
    meo = new Meo();
    meo.An();
    meo.An("ca");
    Console.ReadLine();
}

Nhìn vào hàm main, ở ví dụ trên, lúc đầu ta chỉ tạo một biến là meo thuộc lớp DongVat, sau đó ta mới gọi meo = new Meo()

Khi chạy trình biên dịch mới thực sự biết được rằng, đối tượng tạo ra thuộc lớp nào. Như ví dụ trên, ta có thể meo = new DongVat(); vẫn được, như vậy đây là tính đa hình khi chạy, một đối tượng được tạo ra có thể thuộc lớp cha hoặc con, dẫn đến nó có những thuộc tính và phương thức khác nhau.

Lưu ý: ta chỉ có thể tạo đối tượng của lớp con từ lớp cha như ví dụ trên chứ không thể làm ngược lại. Vì cha là lớp bao quát lớp con.

Các môn học khác

SQL là ngôn ngữ truy vấn mang tính cấu trúc, nó cho phép bạn truy cập và sử dụng database.

HTTP giúp kết nối các máy tính trên mạng Internet thông qua TCP/IP

Chương trình thường được xây dựng quanh dữ liệu và logic để xử lý chúng. Nói cách khác: Program = Cấu trúc dữ liệu + giải thuật. Do vậy đây là môn học bắt buộc dành cho các lập trình viên.