Я встречал этот пример с сайта Typescript:
abstract class Department {
constructor(public name: string) {
}
printName(): void {
console.log("Department name: " + this.name);
}
abstract printMeeting(): void; // must be implemented in derived classes
}
class AccountingDepartment extends Department {
constructor() {
super("Accounting and Auditing"); // constructors in derived classes must call super()
}
printMeeting(): void {
console.log("The Accounting Department meets each Monday at 10am.");
}
generateReports(): void {
console.log("Generating accounting reports...");
}
}
let department: Department; // ok to create a reference to an abstract type
department = new Department(); // error: cannot create an instance of an abstract class
department = new AccountingDepartment(); // ok to create and assign a non-abstract subclass
department.printName();
department.printMeeting();
**department.generateReports();** // error: method doesn't exist on declared abstract type???
У меня есть 2 вопроса по этому поводу:
почему эта строка недопустима? отдел имеет доступ к generateReports (), поскольку его тип также является отделом учета Я запустил этот код, и он действительно выполняет Department.generateReports () без проблем
, когда я делаю department = new Department();
, хотя это является ошибкой для создания экземпляра абстрактного класса не дает мне ошибку во время выполнения. Почему это происходит ? Это моя обязанность не создавать экземпляр абстрактного класса?