Я сомневаюсь, что this
отличается в JavaScript и Java при наследовании.
В Java:
class Animal {
public String name = "animal";
void hello() {
System.out.println("hello " + this.name);
}
}
class Dog extends Animal {
public String name = "dog";
}
public class Main {
public static void main(String...args) {
Dog dog = new Dog();
dog.hello(); // hello animal
}
}
Приведенный выше код выведет hello animal
, этоКажется, когда я вызываю метод hello в экземпляре подкласса Dog, он выводит свойство name в родительском классе Animal.
, но в Javascript оно отличается:
class Animal {
constructor() {
this.name = 'animal';
}
hello() {
console.log('hello ' + this.name);
}
}
class Dog extends Animal {
constructor() {
super();
this.name = 'dog';
}
}
const dog = new Dog();
dog.hello(); // hello dog
Когда вывидите, код с одинаковым логическим выводом отличается от результата.В коде JavaScript вывод метода приветствия hello dog
, это свойство name экземпляра подкласса.
Я также пробую Python и C ++, в результате Python ведет себя как JavaScript, а C ++ ведет себя как Java.
Так ли это, потому что JavaScript и Python - это динамический язык?но каковы подробности этого и почему они сконструированы так?
и какую книгу я должен прочитать, чтобы узнать об этом?
спасибо большое, простите за плохой английский ...