Tính thừa kế trong OOP

Ý tưởng nảy sinh của Tính kế thừa chính là những mối quan hệ trong đời sống. Chẳng hạn như "MayAsus" và "MayAcer" hay "MayLenovo" đều là hai lớp con thuộc lớp cha là "MayViTinh". Do đó, cả hai lớp con này đều thừa hưởng được những đặc điểm của lớp cha.

Ví dụ trong lập trình nó được thể hiện thông qua việc ta có các lớp mayAsus, mayAcer, mayLenovo đều có các thuộc tính (attribute): chieudai, chieurong và phương thức (method): upRam(). Khi đó, nếu chúng ta tạo các lớp này thì chúng ta phải viết trong mỗi lớp đều có 3 phương thức trên. Hơn thế nữa, nếu bạn muốn sửa lại code trong một phương thức nào đó thì bạn phải sửa chúng cả ở 3 lớp sẽ rất tốn thời gian, và có thể dễ sai sót. Vì thế tính kế thừa sẽ được sử dụng trong trường hợp này để giải quyết vấn đề trên.

Tính kế thừa (Inheritance)

Tính kế thừa cho phép xây dựng một lớp mới dựa trên các định nghĩa của lớp đã có. Có nghĩa là lớp cha có thể chia sẽ dữ liệu và phương thức cho các lớp con. Các lớp con khỏi phải định nghĩa lại, ngoài ra có thể mở rộng các thành phần kế thừa và bổ sung thêm các thành phần mới. Tái sử dụng mã nguồn 1 cách tối ưu, tận dụng được mã nguồn.

image

Hình ảnh trên cho thấy khi áp dụng tính kế thừa, ta chỉ cần viết một lần các phương thức kia trong lớp cha và cho các lớp con kế thừa lại. Điều này sẽ tránh việc sai sót khi sửa và tăng khả năng sử dụng lại. Ví dụ, nếu bạn muốn thêm một lớp MayMac , bạn chỉ cần khai báo nó kế thừa từ Class Mayvitinh là cũng có thể dùng được các thuộc tính và phương thức trên rồi.

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

ví dụ dưới dây lớp A thừa kế lớp B và ở lớp con không gọi hàm tạo của lớp cha nhưng nó vẫn được chạy
class B {
  public B () {
    System.out.println ( "Hàm khởi tạo lớp cha" );
  }
}


public class A extends B {
  public A () { // không gọi hàm tạo của lớp cha tường minh
    System.out.println ( "Hàm khởi tạo lớp con" );
  }


  public static void main ( String arg[] ) {
    A thu = new A ();
  }
}
Kết quả sẽ hiển thị thông báo lỗi
Hàm khởi tạo lớp cha
Hàm khởi tạo lớp con
Đây là cách gọi tường minh
class B {
  public B () {
    System.out.println ( "Hàm khởi tạo lớp cha" );
  }
}


public class A extends B {
  public A () {
    super(); // gọi tạo của lớp cha một cách tường minh
    System.out.println ( "Hàm khởi tạo lớp con" );
  }


  public static void main ( String arg[] ) {
    A thu = new A ();
  }
}
Kết quả
Hàm khởi tạo lớp cha
Hàm khởi tạo lớp con
Một ví dụ khác
class B {
  public B () {
    System.out.println ( "Hàm khởi tạo lớp cha" );
  }

  public B ( int i ) {
    System.out.println ( "Hàm khởi tạo lớp cha" );
  }
}


public class A extends B {
  public A () {
    super();
    super(10);// không thể gọi nhiều hơn 1 hàm tạo của lớp cơ sở
    System.out.println ( "Hàm khởi tạo lớp con" );
  }


  public static void main ( String arg[] ) {
    A thu = new A ();
  }
}
Kết quả
Hàm khởi tạo lớp cha
Hàm khởi tạo lớp con
Hàm khởi tạo lớp con
Avatar Administrator

Administrator

@thaycacac
Bạn sẽ tìm thấy niềm vui khi giúp đỡ người khác bằng tất cả tấm lòng
Logo thể loại Java

Java

Chuyên mục học lập trình
Học Java từ cơ bản đến thông thạo cho mọi đối tượng
hello