질문
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를 사용해주셔야합니다.
감사합니다!
198강 (){onTap(e);}의 이해 돕기
0
39
1
video_call 플러그인 설치후 에러 발생
0
47
1
SDK 안드로이드 설치 질문!
0
62
1
코드팩토리 디스코드 링크 다시 부탁드려요~
0
93
1
Webview를 이용해서 URL 상의 페이지 출력 불가
0
71
1
홈스크린 함수를 함축해서 main.dart에 옮기는 문제
0
56
1
플레이스토어
0
60
1
아고라 엔진 init 함수의 반환타입이 Future<void> 이것의 의미는 무엇인가요?
0
56
1
가이드라인 질문
0
59
0
emulator 에러 환경설정 뭐가 문제 일까요??
0
78
1
emulator 실행 오류
0
95
3
Column을 가로방향 최대 사이즈를 차지하도록 하는 방법에 관련
0
73
1
pubspec.yaml에서 font를 추가하면서 weight 값을 지정하는 것이 의미가 있는 것인지 문의
0
44
1
setState()를 호출하지 않으면 build가 실행 안되는 건가요?
0
54
1
video_call 플러그인 설치시 에러문제
0
67
1
children 안의 if 문에서 { } 못쓰는 이유?
0
51
1
이렇게 오류가 떠요
0
67
1
AppBar 사용했는데
0
63
2
[문제해결] '오늘도 출첵!' 의 171번 강의에서 중요한 문제를 발견했습니다
0
58
1
StatefulWidget 실습 에러가 발생합니다.[해결완료]
0
65
1
Video Player 프로젝트에 대한 추가 질문
0
54
0
Row위젯이나 column위젯의 위치는 누가 정하나요??
0
43
1
geolocator 오류때문에 개발진행이 불가능입니다
0
64
1
API 관련 이슈
0
89
2





