해결된 질문
작성
·
192
0
class 공중부품 {
run = () => {
console.log("날라서 도망가자");
};
}
class 지상부품 {
run = () => {
console.log("뛰어서 도망가자");
};
}
class Monster {
power = 10;
부품;
constructor(부품, power) {
this.부품 = 부품;
this.power = power;
}
attack = () => {
console.log("공격하자!");
console.log("내 공격력은 " + this.power + "야!");
};
run = () => {
console.log("도망가자!");
};
}
run 메소드를 this.부품.run();으로 바꿔주지 않아도 뛰어서 or 날아서 도망가자고 바뀌던데요..
상속관계면 오버라이딩으로 생각하고 알아서 바뀌는 것은 이해했는데
이렇게 객체를 집어넣었을 때도 자동을 바꿔주는건 왜 그런건가요?
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
부품 클래스인 공중부품과 지상부품 클래스는 Monster 클래스에게 상속되지 않았기 때문에, 부품을 this.부품.run()으로 호출하면 오류가 발생합니다.
그런데, Monster 클래스의 run 메소드가 오버라이딩되지 않았기 때문에, this.부품.run() 대신에 this.run()을 호출하면 Monster 클래스의 run 메소드가 실행됩니다.
따라서, 부품을 this.run()으로 호출하면 Monster 클래스의 run 메소드가 실행되어 “도망가자!“라는 메시지가 출력됩니다.
만약, Monster 클래스에서 this.부품.run()으로 호출하고 싶다면, 부품 클래스를 상속받도록 설정해야 합니다. 예를들어, Monster 클래스가 공중부품 또는 지상부품 클래스를 상속받는다면, 부품을 this.run()으로 호출했을 때 해당 부품의 run 메소드가 실행될 것입니다.
현재의 코드에서의 동작은 상속과는 관계없이 this.run()이 실행되므로, 상속과 오버라이딩과는 별개의 내용입니다. 이해에 도움이 되셨길 바랍니다. 어떤 점이 더 질문이 있으신가요?