В TypeScript наследование классов позволяет создать новый класс на основе существующего класса, известного как базовый или родительский класс. Производный класс наследует свойства и методы базового класса, а также может добавлять свои собственные уникальные свойства и методы. В этой статье мы рассмотрим различные методы и примеры наследования классов в TypeScript.
- Наследование базового класса.
Чтобы создать производный класс, наследуемый от базового класса, вы можете использовать ключевое словоextends. Вот пример:
class Animal {
constructor(public name: string) {}
move(distance: number) {
console.log(`${this.name} moved ${distance} meters.`);
}
}
class Dog extends Animal {
bark() {
console.log("Woof! Woof!");
}
}
const myDog = new Dog("Buddy");
myDog.move(10); // Output: Buddy moved 10 meters.
myDog.bark(); // Output: Woof! Woof!
В этом примере класс Dogрасширяет класс Animalи наследует его свойство nameи метод move().. Класс Dogтакже добавляет свой собственный метод bark().
- Переопределение метода:
Производные классы могут переопределять методы, унаследованные от базового класса, предоставляя свою собственную реализацию. Вот пример:
class Animal {
makeSound() {
console.log("Animal is making a sound.");
}
}
class Dog extends Animal {
makeSound() {
console.log("Dog is barking.");
}
}
const myDog = new Dog();
myDog.makeSound(); // Output: Dog is barking.
В этом примере класс Dogпереопределяет метод makeSound(), унаследованный от класса Animal, и предоставляет собственную реализацию.
- Модификаторы доступа в унаследованных элементах.
Наследование также сохраняет модификаторы доступа (public,protected,private) члены базового класса. Вот пример:
class Animal {
protected name: string;
constructor(name: string) {
this.name = name;
}
}
class Dog extends Animal {
private breed: string;
constructor(name: string, breed: string) {
super(name);
this.breed = breed;
}
displayBreed() {
console.log(`Breed: ${this.breed}`);
}
}
const myDog = new Dog("Buddy", "Labrador");
console.log(myDog.name); // Error: Property 'name' is protected and only accessible within class 'Animal' and its subclasses.
myDog.displayBreed(); // Output: Breed: Labrador
В этом примере свойство nameзащищено в классе Animal, что означает, что к нему можно получить доступ внутри самого класса и его подклассов, например Dog. Однако свойство breedявляется частным для класса Dogи недоступно извне класса.
Наследование классов TypeScript позволяет создавать иерархические отношения между классами, обеспечивая повторное использование кода и продвигая модульную конструкцию. В этой статье мы рассмотрели основы наследования классов, переопределения методов и модификаторов доступа в унаследованных членах. Понимание этих концепций будет полезно при создании сложных приложений TypeScript.