해결된 질문
작성
·
273
0
OOP 강의에서 상속 공부하던 중 의문이 생겨 질문 드립니다.
void main() {
print('-------------Idol-------------');
Idol apink = Idol(name: "에이핑크", members_count: 5);
apink.say_name();
apink.say_members_count();
// apink.say_male(); - 이건 X
print('-------------boy_group-------------');
boy_group bts = boy_group('bts',7);
bts.say_name();
bts.say_members_count();
bts.say_male();
print('-------------girl_group-------------');
girl_group red_velvet = girl_group('Red Velvet',5);
red_velvet.say_name();
red_velvet.say_members_count();
red_velvet.say_female();
print('-------------type_comparison-------------');
print(apink is Idol);
print(apink is boy_group);
print(apink is girl_group);
print('-------------type_comparison2-------------');
print(bts is Idol);
print(bts is boy_group);
print(bts is girl_group);
print('-------------type_comparison3-------------');
print(red_velvet is Idol);
print(red_velvet is boy_group);
print(red_velvet is girl_group);
}
// 상속 - inheritance
//
// 상속을 받으면, 부모 클래스의 모든 속성을 자식 클래스가 부여받는다.
class Idol {
//이름
String name;
//멤버 숫자
int members_count;
Idol({
required this.name,
required this.members_count,
});
void say_name() {
print("저는 ${this.name}입니다.");
}
void say_members_count() {
print("${this.name}은 ${this.members_count}명의 멤버가 있습니다.");
}
}
// super가 부모를 의미하는!
class boy_group extends Idol {
boy_group(
String name,
int members_count,
) : super(
name: name,
members_count: members_count,
);
// 밑의 super(~~) 이것이 Idol(~~) 을 의미하는 것임! 즉, 부모의 constructor 의미하는 것!
void say_male(){
print("저는 남자아이돌입니다");
}
}
class girl_group extends Idol {
girl_group(
String name,
int members_count,
) : super(
name: name,
members_count: members_count,
);
// 밑의 super(~~) 이것이 Idol(~~) 을 의미하는 것임! 즉, 부모의 constructor 의미하는 것!
void say_female(){
print("저는 여자아이돌입니다");
}
}
여기에서는 name : name을 함으로써, 자식 class에서 받은 name을 부모 class의 name으로 복사해준다/넣어준다고 하셨는데, 그 다음 코드
void main() {
TimesTwo tt = new TimesTwo(2);
print(tt.calculate());
TimesFour tf = new TimesFour(2);
print(tf.calculate());
}
// method : function인데, class 내부에 있는!
// override - 재정의 (우선시하다. 덮어쓰다)
class TimesTwo {
final int number;
TimesTwo(
this.number,
);
//method
int calculate() {
return number * 2;
}
}
class TimesFour extends TimesTwo {
TimesFour(
int number,
) : super(number); //
@override //생략해도 되는데, 예의상 기입한다.
int calculate() {
// return super.number * 4;
return super.calculate() * 2; // 이것도 가능!
}
}
이 내용을 보면, 부모class는 그냥 number인 것이 왜 그런 것이지 잘 이해가 안 됩니다. number:number가 아닌 이유가 어떤 것일까요?? named(required)의 여부가 이를 결정한 것일까요??
답변 1
0
안녕하세요!
말씀하신 number: number는 named parameter를 말씀하시는 것 같습니다.
현재 TimesTwo 클래스는 positional parameter를 받고 있기 때문에 positional parameter를 사용해주셔야합니다.
감사합니다!