Tính Kế Thừa Trong Lập Trình C#

Thảo luận trong 'Tài Liệu' bắt đầu bởi Pussy, Thg 11 11, 2016.

  1. Pussy

    Pussy New Member Chuyển tiền Tìm chủ đề

    Bài viết:
    Tìm chủ đề
    950
    Tính kế thừa là gì?

    Một trong những khái niệm quan trọng nhất trong lập trình hướng đối tượng là Tính kế thừa (Inheritance). Tính kế thừa cho phép tạo ra một lớp mới kế thừa Thuộc tính và Phương thức của một lớp khác. Sau đó có thể xây dựng thêm các thuộc tính và phương thức riêng của lớp mới đó.

    Thuộc tính là đặc tính riêng vốn có của một sự vật, qua đó con người nhận thức được sự vật, phân biệt được sự vật này với sự vật khác. Thường là tính từ hoặc danh từ như màu sắc, mắt, mũi, tên, tuổi,…

    Phương thức là cách thức và phương pháp để thực hiện một hành động nào đó. Thường là động từ như chạy, nhảy, ngủ..

    Lớp cha(lớp đang tồn tại) cho phép một một lớp khác kế thừa được gọi là lớp cơ sở – Base Class, và lớp con(lớp mới) được gọi là lớp thừa kế hay lớp dẫn xuất – Derived Class.


    Ý nghĩa của Tính kế thừa
    • Tính nhất quán: những đối tượng có chung nguồn gốc thì sẽ có những đặc điểm chung giống nhau.
    • Tái sử dụng code: những phần code chung chỉ cần định nghĩa một lần tại lớp cha(Base Class), các lớp con(Derived Class) đều có thể sử dụng mà không cần viết lại.
    • Thuận tiện trong việc bảo trì và phát triển. Khi sửa lỗi hay nâng cấp chỉ cần định nghĩa lại ở lớp cha.
    Tính kế thừa được minh họa như sau:

    [​IMG]

    Không kế thừa

    [​IMG]

    [​IMG]

    Kế thừa – Inheritance

    Ở hình trên các bạn có thể thấy 2 lớp Con trâuCon cún có chung các thuộc tính: Mắt, Chân và các phương thức: Chạy, Ngủ. Đó đều là những đặc điểm chung của một động vật.

    Do đó chúng ta sẽ tạo một lớp Động vật định nghĩa một lần những đặc điểm chung này rồi cho 2 lớp Con trâuCon cún kế thừa. Khi sử dụng chỉ cần gọi ra từ lớp Động vật lấy dữ liệu xử lý mà không cần viết riêng ở mỗi lớp gây ra sự trùng lặp mã lệnh.

    Sau khi kế thừa những đặc điểm chung từ lớp Động vật, thì ứng với mỗi lớp Con trâu hoặc Con cún sẽ xây dựng thêm các thuộc tính và phương thức riêng của nó.


    Cú pháp khai báo và đặc điểm của Tính kế thừa

    Cú pháp khai báo kế thừa trong C#

    Mã:
    [<quyen_truy_cap>] class <Ten_lop_cha>
    {
       ...
    }
    
    [<quyen_truy_cap>] class <Ten_lop_con> : <Ten_lop_cha>
    {
       ...
    }

    Trong đó:

    quyen_truy_cap: là public hay private, protected,… Có thể có hoặc không.

    Ten_lop_cha: Tên lớp cơ sở – Base Class

    Ten_lop_con: Tên lớp dẫn xuất – Derived Class

    Dấu hai chấm: biểu diễn sự kế thừa giữa 2 lớp trong C#


    Đặc điểm của Tính kế thừa:

    Chỉ cho phép đơn kế thừa, tức là một lớp chỉ được phép kế thừa từ một lớp khác.

    Lớp con chỉ kế thừa được, chỉ sử dụng được các thuộc tính và phương thức có phạm vi truy cập là public, internalhoặc protected của lớp cha.

    Một đối tượng thuộc lớp cha có thể tham chiếu đến một đối tượng thuộc lớp con, nhưng ngược lại thì không được.

    Mã:
    // Tạo đối tượng con cún
    ConCun cun1 = new ConCun();     // OK
    DongVat cun2 = new ConCun();    // OK
    //ConCun cun3 = new DongVat();  // ERROR: Cannot implicitly convert type 'DongVat' to 'ConCun'
    Từ khóa base tương tự như từ khóa super trong java dùng để truy cập đến các thành phần bên trong lớp cha từ lớp con.

    Không dùng từ khóa base cho các thành phần(thuộc tính và phương thức) static, vì những thành phần này sẽ được truy cập trực tiếp bằng tên lớp.

    Từ khóa new trong kế thừa không phải là toán tử dùng để khởi tạo đối tượng, mà nó là một modifier dùng để xác định phạm vi của phương thức.

    Trong trường hợp vì một lý do nào đó, bạn muốn tạo một phương thức ở lớp con có tên giống với tên của một phương thức ở lớp cha, thì để tránh nhập nhằng giữa 2 phương thứ này, bạn cần gắn từ khóa new cho phương thức ở lớp con.

    Ví dụ bên dưới sẽ minh họa cách sử dụng từ khóa base, new, và cách gọi phương thức tĩnh (là phương thức khai báo có sử dụng từ khóa static) bằng tên lớp.

    Mã:
    using System;
    namespace MinhHoangBlog
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Tạo đối tượng Con Cún
                ConCun cun = new ConCun();
                // Gọi phương thức Chạy
                cun.Chay();
                // Gọi phương thức tĩnh bằng tên lớp
                DongVat.Ngu();
                Console.ReadKey();
            }
        }
        /// <summary>
        /// Class cơ sở Động Vật
        /// </summary>
        class DongVat
        {
            public void Chay()
            {
                Console.WriteLine( "Dong vat chay." );
            }
            // Phương thức tĩnh
            public static void Ngu()
            {
                Console.WriteLine( "Dong vat ngủ." );
            }
        }
        /// <summary>
        /// Class dẫn xuất Con Cún
        /// </summary>
        class ConCun : DongVat     // Kế thừa
        {
            // Phương thức CÙNG TÊN với lớp cha
            public new void Chay()
            {
                // Gọi hàm từ lớp cha
                base.Chay();
                Console.WriteLine( "Con cun chay." );
            }
        }
    }
    Kết quả chương trình:

    Mã:
    Dong vat chay.
    
    Con cun chay.
    
    Dong vat ngủ.
    Như vậy, chúng ta đã cùng tìm hiểu xong tính kế thừa trong C#

    Nếu có gì chưa hiểu thì các bạn comment nhé!
     
    Last edited by a moderator: Thg 4 2, 2018
  2. Đang tải...
Trả lời qua Facebook

Chia sẻ trang này