QA Automation/dart

11. 상속(Inheritance)

kokorii_ 2023. 5. 17. 14:57

1. 설명

  • 상속을 받으면 부모 클래스의 모든 속성을 자식 클래스가 부여 받음
  • 아래 예제의 경우 부모 클래스의 생성자가 requried 이기 때문에 자식 클래스에서도 규칙을 따라줘야 함
void main() {
  print('---- Idol ----');
  Idol apink = Idol(name: 'apink', membersCount: 5);

  apink.sayName();
  apink.sayMembersCount();

  print('---- BoyGroup ----');
  BoyGroup bts = BoyGroup('bts', 7);

  //Idol의 모든 속성들을  쓸 수 있음
  bts.sayName();
  bts.sayMembersCount();
  bts.sayMale();

  print('---- GirlGroup ----');
  
  GirlGroup redVelvet = GirlGroup('Red Velvet', 5);
  
  redVelvet.sayName();
  redVelvet.sayMembersCount();
  redVelvet.sayFemale();
  
  print('---- Type Comparison ----');
  
  print(apink is Idol);
  print(apink is BoyGroup);
  print(apink is GirlGroup);
  
  print('---- Type Comparison ----');
  
  print(bts is Idol); //result -> true
  print(bts is BoyGroup);
  print(bts is GirlGroup);
  
  print('---- Type Comparison ----');
  
  print(redVelvet is Idol); //result -> true
  print(redVelvet is BoyGroup);
  print(redVelvet is GirlGroup);
  
}

class Idol {
  String name;
  int membersCount;

  Idol({required this.name, required this.membersCount});

  void sayName() {
    print('저는 ${this.name}입니다.');
  }

  void sayMembersCount() {
    print('${this.name}은 ${this.membersCount}명의 멤버가 있습니다.');
  }
}

//부모 클래스의 생성자가 requried 이기 때문에 생성자 규칙을 준수해줘야 함
class BoyGroup extends Idol {
  BoyGroup(
    String name,
    int membersCount,
  ) : super(name: name, membersCount: membersCount);

  void sayMale() {
    print('저는 남자 아이돌입니다.');
  }
}

class GirlGroup extends Idol {
  GirlGroup(
    String name,
    int membersCount,
  ) : super(name: name, membersCount: membersCount);
  
  void sayFemale(){
    print("저는 여자 아이돌입니다.");
  }
}

2. Type Comparison

  • 위 예제의 type comparison 결과 값을 유추해볼 것
  • BoyGroup, GirlGroup 클래스는 Idol 타입이 될 수 있음 
  • BoyGroup은 GirlGroup 타입일 수 없음(반대도 마찬가지)