유사한 구현을 유지하면서 다른 객체 또는 클래스로 확장하는 것,
또는 상위 클래스의 멤버를 하위 클래스로 내려주는 것.
class Person {
String name;
int age;
Person(this.name, this.age);
}
class Korean extends Person {
String nation = 'Korea';
Korean(super.name, super.age);
}
class American extends Person {
String nation = 'America';
American(super.name, super.age);
}
void main() {
Korean yongyeon = Korean('yongyeon', 20);
print('${yongyeon.name} | ${yongyeon.age} | ${yongyeon.nation}');
}
올바른 상속은 “is-a 원칙” 이라고 하는 규칙에 따른 상속을 말한다.
class Korean extends Person
=> Korean is a Person ( Korean은 Person의 한 종류이다. )
“Mixin은 여러 클래스 계층에서 클래스 코드를 재사용하는 방법이다.”
=> 공식문서 : https://dart-ko.dev/language/mixins
- 상속과 상관없는 별도의 확장을 위해 사용하며,
상속과는 다르게 여러개를 선언 할 수 있고, 부모/자식 클래스 계층에 상관 없이 사용 할 수 있다.
mixin Cheese {
}
mixin Pepperoni {
}
abstract class Pizza with Cheese {
}
class PepperoniPizza extends Pizza with Pepperoni {
}
class CheesePizza extends Pizza {
}
자식클래스 일 수록 구체화 되고,
부모 클래스 일 수록 추상적인 것으로
일반화 된다.
상속의 기초
인스턴스
생성자 동작