Dart 상속

Flutter & 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();
반응형

'Flutter & Dart' 카테고리의 다른 글

Dart 상위 위젯과 하위 위젯의 상태값 가져오기  (0) 2023.11.20
Dart Class 생성자  (0) 2023.11.17
Dart 예외처리 (try on finally)  (0) 2023.11.16
Dart Function  (0) 2023.11.16
Dart Null safety  (0) 2023.11.16
Dart 컬렉션 타입 (List, Set, Map)  (0) 2023.11.16
Dart 변수 타입 (var, dynamic)  (0) 2023.11.16
Dart 상수 (const, final)  (0) 2023.11.16
Posted by 까칠코더
,