728x90
상속
일반적으로 부모님에게 상속을 받는다 이런 말과 같다. 부모님의 재산을 자식이 받을 수 있는 것이다.
클래스 개념으로 설명하자면 상속을 받으면 부모 클래스의 모든 속성(필드, 메소드)을 자식 클래스가 부여받는다.
void main() {
FantasyBook rantasy = FantasyBook('왕좌의게임', 20);
rantasy.bookName(); // 책 이름은 왕좌의게임 입니다.
rantasy.bookNo(); // 책 번호는 20 입니다.
rantasy.categoryName(); // 판타지 소설책입니다.
RomanceBook romance = RomanceBook('루시아', 30);
romance.bookName(); // 책 이름은 루시아 입니다.
romance.bookNo(); // 책 번호는 30 입니다.
romance.categoryName(); // 로맨스 소설책입니다.
}
class Book {
String name;
int no;
Book(this.name, this.no);
bookName() {
print('책 이름은 ${this.name} 입니다.');
}
bookNo() {
print('책 번호는 ${this.no} 입니다.');
}
}
class FantasyBook extends Book {
FantasyBook(String name, int no) : super(name, no);
categoryName() {
print('책의 카테고리는 판타지입니다.');
}
}
class RomanceBook extends Book {
RomanceBook(String name, int no) : super(name, no);
categoryName() {
print('로맨스 소설책입니다.');
}
}
- Book에는 책 이름 name 변수, 책 번호 no 변수와 이름과 번호를 출력해 주는 bookName(), bookNo() 메소드가 작성되어 있다.
- FantasyBook, RomanceBook은 Book 클래스를 상속받는다. 상속받을 때는 클래스 extends 부모 클래스로 선언해준다. (상속 키워드는 extends)
- FantasyBook, RomanceBook 생성자 파라미터 name과 no를 부모 클래스에게 전달해야 한다. 생성자 전달은 this가 아니라 super를 써야 한다.
- main() 함수에서 FantasyBook, RomanceBook 클래스로 생성을 해도 부모인 Book 클래스의 bookName(), bookNo() 메서드들을 그대로 부여받았기 때문에 호출이 가능해진다.
- FantasyBook, RomanceBook 클래스는 자신이 가진 메서드 categoryName()도 호출이 가능하다. 부모인 Book 클래스는 categoryName()을 사용할 수 없다.
클래스 타입 비교
void main() {
FantasyBook fantasy = FantasyBook('왕좌의게임', 20);
RomanceBook romance = RomanceBook('루시아', 30);
print(fantasy is Book); // true
print(fantasy is FantasyBook); // true
print(fantasy is RomanceBook); // false
print(romance is Book); // true
print(romance is FantasyBook); // false
print(romance is RomanceBook); // true
}
- fantasy는 Book 클래스 타입이 맞고 FantasyBook 클래스 타입이 맞고 RomanceBook 클래스 타입이 아니다.
- romance는 Book 클래스 타입이 맞고 FantasyBook 클래스 타입이 아니며 RomanceBook 클래스 타입이 맞다.
상속받은 클래스는 자기 자신과 부모 클래스 타입이 될 수 있으나 다른 상속 클래스와는 연관이 없다는 걸 알 수 있다.
300x250
'Dart' 카테고리의 다른 글
[Dart] 언어 기본기 - Static편 (0) | 2022.12.13 |
---|---|
[Dart] 언어 기본기 - 오버라이드편 (0) | 2022.12.12 |
[Dart] 언어 기본기 - 클래스편 (1) | 2022.12.10 |
[Dart] 언어 기본기 - Typedef편 (0) | 2022.12.09 |
[Dart] 언어 기본기 - 함수편 (0) | 2022.12.08 |
댓글