Abstract Class trong TypeScript

Abstract Class trong TypeScript

Định nghĩa một abstract class trong TypeScript bằng cách sử dụng từ khóa abstract. Abstract class chủ yếu được sử dụng để các lớp khác kế thừa từ chúng. Chúng ta không thể tạo một thể hiện của một abstract class.

Một abstract class thường bao gồm một hoặc nhiều phương thức trừu tượng (abstract method) hoặc các khai báo thuộc tính. Lớp kế thường abstract class phải định nghĩa tất cả các phương thức trừu tượng.

Abstract class sau khai báo một phương thức trừu tượng find và một phương thức bình thường display.

abstract class Person {
    name: string;
    
    constructor(name: string) {
        this.name = name;
    }

    display(): void{
        console.log(this.name);
    }

    abstract find(string): Person;
}

class Employee extends Person { 
    empCode: number;
    
    constructor(name: string, code: number) { 
        super(name); // must call super()
        this.empCode = code;
    }

    find(name:string): Person { 
        // execute AJAX request to find an employee from a db
        return new Employee(name, 1);
    }
}

let emp: Person = new Employee("James", 100);
emp.display(); //James

let emp2: Person = emp.find('Steve');

Trong ví dụ trên, Person là một abstract class bao gồm một thuộc tính và hai phương thức, một trong số đó được khai báo là abstract. Phương thức find() là một phương thức trừu tượng và do đó phải được định nghĩa trong lớp kế thừa. Lớp Employee kế thừa lớp Person và vì vậy nó phải định nghĩa phương thức find(). Lớp Employee phải triển khai tất cả các phương thức trừu tượng của lớp Person, nếu không trình biên dịch sẽ hiển thị lỗi.

The class which implements an abstract class must call super() in the constructor.

Abstract class cũng có thể có các thuộc tính trừu tượng, như được trình bày ở ví dụ bên dưới.

abstract class Person {
    abstract name: string;

    display(): void{
        console.log(this.name);
    }
}

class Employee extends Person { 
    name: string;
    empCode: number;
    
    constructor(name: string, code: number) { 
        super(); // must call super()
        
        this.empCode = code;
        this.name = name;
    }
}

let emp: Person = new Employee("James", 100);
emp.display(); //James

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *