Chương 5 Thừa kế và Đa hình
5.4. Lớp trừu tượng
Phương thức trừu tượng là phương thức chỉ có tên thôi và nó phải được cài đặt lại ở tất các các lớp kế thừa. Lớp trừu tượng chỉ thiết lập một cơ sở cho các lớp kế
thừa mà nó không thể có bất kỳ một thể hiện nào tồn tại.
Ví dụ 5-2 Minh hoạ phương thức và lớp trừu tượng
using System;
abstract public class Window {
// constructor takes two integers to // fix location on the console public Window(int top, int left) {
this.top = top; this.left = left; }
// simulates drawing the window // notice: no implementation
abstract public void DrawWindow( );
// these members are private and thus invisible // to derived class methods. We'll examine this // later in the chapter
protected int top; protected int left; }
// ListBox derives from Window public class ListBox : Window {
// constructor adds a parameter
public ListBox(int top, int left, string contents): base(top, left) // call base constructor
{
listBoxContents = contents; }
// an overridden version implementing the // abstract method
public override void DrawWindow( ) {
Console.WriteLine("Writing string to the listbox: {0}", listBoxContents); }
private string listBoxContents; // new member variable }
public class Button : Window {
public Button(int top, int left): base(top, left) {
}
// implement the abstract method public override void DrawWindow( ) {
Console.WriteLine("Drawing a button at {0}, {1}\n", top, left); }
}
public class Tester {
static void Main( ) {
Window[] winArray = new Window[3];
winArray[0] = new ListBox(1,2,"First List Box"); winArray[1] = new ListBox(3,4,"Second List Box"); winArray[2] = new Button(5,6);
for (int i = 0;i < 3; i++) { winArray[i].DrawWindow( ); } } } 5.4.1. Giới hạn của lớp trừu tượng
Ví dụ trên, phương thức trừu tượng DrawWindow() của lớp trừu tượng
Window được lớp ListBox kế thừa. Như vậy, các lớp sau này kế thừa từ lớp ListBox
đều phải thực hiện lại phương thức DrawWindow(), đây là điểm giới hạn của lớp trừu tượng.
Hơn nữa, như thế sau này không bao giờ ta tạo được lớp Window đúng nghĩa. Do vậy, nên chuyển lớp trừu tượng thành giao diện trừu tượng.