Flutter & Dart
Dart 상속
까칠코더
2023. 11. 17. 09:40
반응형
부모 클래스를 상속할때에는 extends를 사용합니다.
class ParentClass {
int value;
ParentClass(this.value);
}
class ChildClass extends ParentClass {
ChildClass(int value) : super(value) { }
}
class Child2Class extends ParentClass {
Child2Class(super.value);
}
추상 클래스는 abstract를 사용해서 정의하며, (JAVA에서는 인터페이스, Swift에서는 프로토콜과 유사합니다)
추상함수만 제공함으로써 실제 상속받는 클래스에서 구현부를 제공하도록 하게 합니다.
abstract class User {
void printName();
}
class Customer extends User {
String name;
Customer(this.name) { }
@override
void printName() {
print('name = $name');
}
}
Customer('zzz').printName(); // name = zzz
다른 클래스를 암시적 인터페이스로 사용하기 위해서는 implements를 사용하며, 부모 클래스의 모든 멤버 변수를 재정의 해줘야 합니다.
class User {
String name;
int age;
User(this.name, this.age);
String greet(String guest) => 'Hello, $guest, I\'m $name, and $age years old';
}
class Customer implements User {
String name = 'abc';
int age = 10;
@override
String greet(String guest) {
return 'Hello, $guest';
}
}
// How to use
User user = Customer();
print('Say ${user.greet('zzz')}'); // Say Hello, zzz
멤버를 공유하기 위해 class 대신에 mixin 을 사용하는 방법이 있습니다. 이를 상속받기 위해서는 extends 대신에 with라는 사용합니다.
또한 mixin으로 선언할때 on 키워드를 사용해서 특정 클래스에서만 상속받을 수 있도록 할 수 있습니다.
mixin User {
String name = 'abc';
void printName() {
print('name = $name');
}
}
class Guest {
}
mixin User2 on Guest {
String name = 'aaa';
void printName() {
print('name = $name');
}
}
class Customer with User {
void say() {
printName();
}
}
class MyGuest extends Guest with User2 {
void say() {
printName();
}
}
// How to use
var user = Customer();
user.say(); // name = abc
user.name = 'zzz';
user.say(); // name = zzz
var guest = MyGuest();
guest.say();
반응형