트레이트 – 10.재정의 우선 순위

기반 클래스(base class)에서 상속된 멤버는 트레이트에 의해 조합된 멤버에 의해 재정의 됩니다. 우선 순위는 현재 클래스(파생 클래스)의 메소드가 트레이트 메소드를 재정의 하고, 이어서 상속된(기반 클래스에 있는) 메소드를 재정의 하는 것입니다.

우선순위에 의한 재정의

기반 클래스(base class)에서 상속된 메소드는 MyHelloWorld에 조합된 SayWorld 트레이트의 메소드에 의해 재정의 됩니다. SayWorld 트레이트 메소드는 MyHelloWorld 클래스에 정의된 것처럼 동작합니다. 즉 아래와 같은 순서로 재정의(overriding)가 진행됩니다.

  1. 파생 클래스(MyHelloWorld)의 메소드가 트레이트(SayWorld) 메소드를 재정의함
  2. 트레이트(SayWorld) 메소드가 기반 클래스(Base)의 메소드를 재정의함

우선순위에 의한 재정의

1번 순서에서 파생 클래스의 메소드가 트레이트 메소드를 재정의하였다면, 이 때부터는 트레이트 메소드는 실질적으로 파생 클래스 정의 내에 없는 것과 같습니다. 물론 파생 클래스가 해당 메소드를 정의하지 않았다면 트레이트에서 정의한 메소드는 파생 클래스 정의 내의 메소드로 계속 존재하게 됩니다.

따라서 1번 순서에서 파생 클래스가 메소드(MyHelloWorld::SayHello)를 정의하여 트레이트 메소드(SayWorld::SayHello)를 재정의한 상태라면, 2번 순서에서는 삭제된 트레이트 메소드(SayWorld::SayHello)가 아니라 파생 클래스에서 정의한 메소드(MyHelloWorld::SayHello)가 기반 클래스의 메소드(Base::SayHello)를 재정의하게 됩니다.

답글 남기기