Cool wallpaper http://www.fancymessage.com
Topics
Search on This Blog
Tuesday, June 22, 2010
Tính thừa kế trong lập trình hướng đối tượng
Chúng ta biết rằng, trong lập trình hướng đối tượng, các lớp có thể thừa kế lẫn nhau. Khi thừa kế, một lớp có thể có các thuộc tính và phương thức của lớp bố mẹ. Tính thừa kế trong lập trình hướng đối tượng chia làm hai dạng:
- Tính đơn thừa kế: Java, C#, Delphi,….
- Tính đa thừa kế: C++,…
Với tính đơn thừa kế, một lớp chỉ có thể thừ kế từ một lớp cơ sở. Điều này hoàn toàn khác so với tính đa thừa kế: một lớp có thể thừa kế từ nhiều lớp cơ sở. Tính đa thừa kế làm gia tăng sức mạnh cho các ngôn ngữ lập trình hướng đối tượng hỗ trợ nó. Tuy nhiên, nó lại làm cho ngôn ngữ trở nên cồng kềnh, phức tạp. Với tính đơn thừa kế, ngôn ngữ sẽ hiệu quả và rõ rang hơn. Tuy nhiên, đại đa số những nhà phát triển ngôn ngữ hướng đối tượng về sau đều nhận ra tính mạnh mẽ của đa thừa kế, do đó, họ đã đưa vào ngôn ngữ này (như Java, Delphi….) khái niệm giao diện Interface. Giao diện thực chất cũng là một lớp, nhưng nó chỉ chứa các phương thức ảo mà thôi. Chúng ta có thể xem ví dụ giao diện trong Java
public interface Human{
public void talk();
}
public interface Animal{
public void eat();
public void run();
}
public class Student implements Human, Animal{
public void talk(){
}
public void eat(){
}
public void run(){
}
public void learn(){
}
}
Như bạn thấy, Lớp Student thực thi hai giao diện Human và Animal. Chính vì lẽ này, nó cần thực thi mọi phương thức của hai giao diện này. Ngoài ra, nó có thể bổ sung thêm các phương thức riêng (ở đây là phương thức learn).
Labels:
C# và .NET,
C++,
Delphi,
Java
Subscribe to:
Post Comments (Atom)
em Chào Thầy!
ReplyDeletevậy thì interface sinh ra chỉ để thay thế đa kế thừa thôi phải không Thầy?
em cám ơn Thầy, Chúc Thầy một ngày vui vẻ
Không hẳn vậy. Nó còn giúp mở rộng khả năng thừ kế. Khả năng này thể hiện rõ trong việc thực thi các gia diện API. Ngoài ra, khi thiết kế đối tượng, ta biết chúng cần thực thi một số phương thức, nhưng chưa biết chính xác nó thực thi như thế nào thì ta dùng abstract class. Nếu là một class abstract hoàn toàn, thì nó là interface.
ReplyDelete