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 타입일 수 없음(반대도 마찬가지)