Я ожидал, что он вызовет метод класса Animal, а не Snake.
Что на самом деле происходит, когда я делаю кастинг? typescript <Class>object
class Animal {
name: string;
constructor(theName: string) {
this.name = theName;
this.toString();
console.log(`\tis Animal?: ${this instanceof Animal}`);
console.log(`\tis Snake?: ${this instanceof Snake}`);
console.log(`\tis Horse?: ${this instanceof Horse}`);
console.log()
}
toString() {
console.log(`My name is ${this.name} and I'm a animal`);
}
}
class Snake extends Animal {
name: string;
constructor(nameAnimal: string, nameSnake: string) {
super(nameAnimal);
this.name = nameSnake;
}
toString() {
console.log(`My name is ${this.name} and I'm a snake`);
}
}
class Horse extends Animal {
constructor(name: string) {
super(name);
}
}
// create my objects
let sammy = new Snake('Sammy the Python', 'sssssamy');
let tommy: Animal = new Horse('Tommy the Palomino');
// using method of snake
sammy.toString();
// casting
const animal: Animal = (<Animal>sammy); // or const animal: Animal = sammy as Animal;
// using method of animal
animal.toString()
EDIT:
фиксированный выход
Выход:
My name is Sammy the Python and I'm a snake
is Animal?: true
is Snake?: true
is Horse?: false
My name is Tommy the Palomino and I'm a animal
is Animal?: true
is Snake?: false
is Horse?: true
My name is sssssamy and I'm a snake
My name is sssssamy and I'm a snake
В каком случае мне не нужно было бы печатать Меня зовут Ссссамы, а я животное?
Я думаю, что метод перегрузки, и методы в базе должны быть вызваны, потому что я использовал приведение в змею.