Kiến thức khá quan trọng trong học lập trình java chính là tính kế thừa

Thảo luận trong 'Lập Trình JAVA' bắt đầu bởi Tampham, 24/1/18.

  1. Khi chúng ta nói về tính kế thừa, từ khóa xuyên suốt nhất được sử dụng đó là extends và implements trong java. Tất nhiên có sự khác biệt giũa hai từ khóa này và cách sử dụng như thế nào, thì bài viết sau mình sẽ chia sẻ thêm nhé.

    Bắt đầu với tính kế thừa là gì?

    Tính kế thừa trong java là kỹ thuật trong đó một đối tượng thu lại nhiều thuộc tính và phương thức của lớp cha. Ý tưởng đằng sau tính kế thừa trong java là tạo một lớp mới được xây dựng dựa trên lớp đang tồn tại. Khi bạn kế thừa từ một lớp đang tồn tại, bạn có thể tái sử dụng các phương thức, các trường của lớp cha, và bạn có thể bổ sung thêm phương thức hoặc tính mới. Tính kế thừa biểu diễn mối quan hệ IS-A, còn được gọi là mối quan hệ cha con.

    Tại sao sử dụng tính kế thừa trong Java?

    Sau đây là một ví dụ cụ thể bạn sẽ hiểu rõ hơn

    Chẳng hạn như tôi có một class Nhân Sự gồm 3 thuộc tính họ tên, quê quán, năm sinh. Bây giờ, tôi cũng có class khác là Học Sinh, lớp Học Sinh này cũng có 3 thuộc tính họ tên, quê quán, năm sinh. Vấn đề đặt ra đây là gì, tôi phải tạo class Học Sinh giống như class Nhân Sự gồm 3 thuộc tính trên hay có vấn đề nào giải quyết một cách đơn giản mà không cần tạo 3 thuộc tính không? Thưa các bạn là câu trả lời là có. Chỉ cần chúng ta sử dụng tính kế thừa trong Java.

    Class NhanSu

    [​IMG]














    Class HocSinh

    [​IMG]


    Cú pháp của tính kế thừa trong Java

    [​IMG]

    Từ khóa extends chỉ rằng bạn đang tạo một lớp mới mà kế thừa từ một lớp đang tồn tại. Trong java, một lớp mà được kế thừa gọi là lớp cha, lớp mới gọi là lớp con.


    Ví dụ tính kế thừa trong Java

    Bây giờ chúng ta thử test ví dụ trên nhé

    [​IMG]

    Rõ ràng các bạn thấy lớp Học Sinh kế thừa từ lớp Nhân Sự, nhưng trong lớp Học Sinh lại không có phương thức và thuộc tính của lớp cha(Nhân Sự), như vậy đoạn code trên bị lỗi. Nhưng bạn nhìn kỹ đoạn code sẽ thấy, class Nhân Sự cho phạm vi truy cập là private nên chỉ sử dụng được trong lớp đó thôi. Cho nên các bạn chú ý khi kế thừa trong java là:

    Chúng ta sử dụng từ khóa kế thừa extends của lớp con để kế thừa các thuộc tính của lớp cha trừ thuộc tính private của lớp cha.

    Để kế thừa lớp cha, bạn cho phạm vi truy cập public sẽ kế thừa những thuộc tính đó. Tuy nhiên, vì Java có tính bao đóng nên khuyên các bạn nên dùng private, các lập trình java nên chú ý đến điều này nhé. Java khuyến cáo chúng ta nên sử dụng như vậy.

    Các loại kế thừa trong Java

    Trên cơ sở Java thì có 3 lớp kế thừa đó là Single(đơn), multilevel(nhiều tầng) và hierarchical(có cấu trúc). Trong lập trình Java, đa kế thừa (multiple) và kế thừa lai(hybrid) chỉ được hỗ trợ thông qua Interface.

    Lưu ý: Đa kế thừa không được hỗ trợ trong java thông qua lớp. Khi một lớp kế thừa từ nhiều lớp, thì đây là đa kế thừa.

    Vậy câu hỏi đặt ra là? Tại sao đa kế thừa lại không hỗ trợ thông qua lớp?

    Trả lời: Để giảm độ phức tạp và làm đơn giản hóa trong java thì đa kế thừa không được hỗ trợ. Gỉa sử có 3 lớp A, B, C. Lớp C kế thừa lớp A, B. Nếu các lướp A và B có cùng phương thức và bạn gọi nó ra từ đối tượng lớp con, thì điều này gây ra lưỡng nghĩa là để gọi phương thức của lớp A hoặc lớp B.

    Một đặc điểm quan trọng phải ghi nhớ là java chỉ hỗ trợ kế thừa đơn. Điều này nghĩa là một lớp không thể kế thừa từ nhiều hơn một lớp. Sau đây là đoạn code không hợp lệ:

    [​IMG]


    Tóm lại đôi lời ...

    Bài viết trên cũng như là kinh nghiệm, kiến thức của tôi chia sẻ thêm cho mọi người cùng biết, nếu có gì sai sót mong cộng đồng góp ý để nâng cao trình độ hơn.

    Hẹn các bạn bài viết tiếp theo nhé !

    Cảm ơn bạn đã đọc!

Chia sẻ trang này