Java 에서도 상속을 사용한다.
상속이란 부모가 가진 상태와 행위를 자식이 물려받는 것이다.
버거가 있고 치즈버거는 버거를 상속받는다.
class Buger {
Buger() {
print("버거 생성됨");
}
}
class cheeseBurger extends Buger {
cheeseBurger() {
print("치즈 버거 생성됨");
}
}
void main() {
Buger b1 = cheeseBurger();
}
버거 생성됨 치즈 버거 생성됨
실행 시켜보면 부모 클래스가 먼저 호출된다. super()가 생략되어 있는 것이다.
이것을 초기화 하려면
class cheeseBurger extends Buger {
String name;
cheeseBurger(this.name) : super() {
print("치즈 버거 생성됨");
}
}
저기서
this.name
해야함class Buger {
Buger(String name) {
print("버거 생성됨");
}
}
class cheeseBurger extends Buger {
String name;
cheeseBurger(this.name) : super(name) {
print("치즈 버거 생성됨");
}
}
부모에게 값을 넘기려면 이렇게
근데 Burger 에
String? name;
을 넣게되면 치즈버거의 name 에 에러가 생긴다.Dart 에서는 내부에선 행위만 적혀 있어야함.
초기화는 생성자 내부나 이니셜라이즈 로 한다.
동적 바인딩

컴포지션
컴포지션(=has)과 상속(=is)의 차이는 is 와 has 의 차이

초기화 하는 두 가지 방법
후자는 3항 연산자 같은걸로 값을 변경해야 할 때 사용
class Engine {
int power = 5000;
}
class wheel {
int count = 4;
}
class Sonata {
Engine e;
Sonata(this.e, this.w); // 의존성 주입
}
mixin
의존성 주입할 때 쓸 수 있는거 컴포지션 ~~ 할 때
mixin class Engine {
int power = 5000;
}
mixin class wheel {
int count = 4;
}
class Sonata with Engine, wheel {}
void main() {
Sonata s = Sonata();
print(s.power);
print(s.count);
}
5000
4
int n1 = 1;
double n2 = 1.0;
bool n3 = true;
String n4 = '"f","1" ${n1}';
var n5 = 1; // 타입추론
dynamic n6 = "값"; // 오브젝트 타입
dynamic n8 = null;
int? n9 = null;
class Dog {}
Dog? d2 = null;
Function? f = null;
Function? f2 = () => 1;
Function? f3 = () {};
//final 이 들어가는 기준 이 다름 보통 final 들어가면 변수 타입 생략
final int count = 1;
void main() {
//count = 2;
}
Share article