본문 바로가기

카테고리 없음

[Flutter] Dart 인터페이스

 

- dart는 인터페이스가 따로 존재하지 않는다.
- class를 인터페이스 처럼 사용하게 된다.- dart 는 extends로 상속을 받을 때는 단일 상속에 해당한다.
- implements로 클래스를 구현하는 방식을 사용하면 다중 상속처럼 사용할 수 있다
- extends 키워를 이용할 때는 필요한 메서드들만 재구현 할 수 있다.
- implements로 클래스를 구현하면 모든 메서드들을 재구현 해야 한다.
void main(){
  var dog1 = Dog1(100, 10, "몰티즈");
  dog1.showName();
  dog1.showAge();
  dog1.showDogRunLength();

  var dog2 = Dog2(200, 20, "비숑");
  dog2.showName();
  dog2.showAge();
  dog2.showDogRunLength();
}

// 부모 클래스
class Animal{
  late int age;
  late String name;

  Animal(this.age, this.name);

  void showAge(){
    print("나이는 ${age}살 입니다");
  }

  void showName(){
    print("이름은 ${name}입니다");
  }
}

// 상속
class Dog1 extends Animal{

  late int dogRunLength;

  Dog1(this.dogRunLength, super.age, super.name);

  void showDogRunLength(){
    print("강아지가 뛴 거리는 ${dogRunLength}m 입니다");
  }
}

// 클래스를 인터페이스로 사용한다.
// 쉼표로 구분하여 다수를 작성해도 된다.
// 클래스를 인터페이스로 구현할 경우 클래스가 가진
// 모든 변수와 모든 메서드들을 재구현 해줘야 한다.
// 즉, 부모가 가지고 있는 것을 물려받는 개념이 아니고
// 전부 다시 구현하는 개념이 된다.
class Dog2 implements Animal{
  late int dogRunLength;
  // Animal이 가지고 있는 모든 변수들을 다시 정의한다.
  @override
  int age;

  @override
  String name;

  Dog2(this.dogRunLength, this.age, this.name);

  void showDogRunLength(){
    print("강아지가 뛴 거리는 ${dogRunLength}m 입니다");
  }
  // Animal이 가지고 있는 모든 메서드들을 다시 구현해야 한다.
  @override
  void showAge() {
    // TODO: implement showAge
  }

  @override
  void showName() {
    // TODO: implement showName
  }
}