카테고리 없음

[Flutter] Dart 상속

연나연 2024. 4. 30. 13:32

목차
1. 상속
2. 오버라이드

 

1. 상속

extends 키워드로 클래스 간의 상속 관계를 설정 할 수 있습니다.
상속은 단 하나의 클래스만 상속받을 수 있습니다.
부모 클래스를 상속받은 자식 클래스에서는 부모 클래스의 생성자를 실행해주어야 합니다.
자식 클래스에서는 부모에게서 물려받은 메서드와 속성을 사용할 수 있습니다.

void main(){
  // 자식 클래스를 통해 객체를 생성한다.
  var dog1 = Dog(100, 10, "말티즈");
  dog1.showDogRunLength();
  dog1.showAge();
  dog1.showName();

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

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

  Animal(this.age, this.name);

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

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

// 자식 클래스
class Dog extends Animal{

  late int dogRunLength;

  // 클래스의 객체를 생성할 때 생성자에서
  // 부모가 가진 매개변수가 없는 생성자를 자동으로 호출하려고 한다.
  // 만약 부모클래스에 매개변수가 없는 생성자가 없다면
  // 부모의 생성자를 명시적으로 호출해줘야 한다.
  // 문법적으로 보면 부모의 변수에 값을 담아주는 형태로 작성해주면 된다.
  Dog(this.dogRunLength, super.age, super.name);

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

<출력결과>

 

2. 오버라이드

부모 클래스나 인터페이스에 정의된 메서드를 재정의 할 때 사용합니다.
override 키워드를 이용하지만 생략할 수도 있으나, 코드 가독성을 위해 @override 키워드를 사용해주면 좋을 것 같습니다.

void main(){
  // 자식 클래스를 통해 객체를 생성한다.
  var dog1 = Dog(100, 10, "말티즈");
  dog1.showDogRunLength();
  dog1.showAge();
  dog1.showName();

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

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

  Animal(this.age, this.name);

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

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

// 자식 클래스
class Dog extends Animal{

  late int dogRunLength;

  // 클래스의 객체를 생성할 때 생성자에서
  // 부모가 가진 매개변수가 없는 생성자를 자동으로 호출하려고 한다.
  // 만약 부모클래스에 매개변수가 없는 생성자가 없다면
  // 부모의 생성자를 명시적으로 호출해줘야 한다.
  // 문법적으로 보면 부모의 변수에 값을 담아주는 형태로 작성해주면 된다.
  Dog(this.dogRunLength, super.age, super.name);

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

  // 부모가 가지고 있는 메서드를 재 구현 하는 것도 가능하다.
  @override
  void showName(){
    super.showName();
    print("이름은 ${name}입니다2");
  }
}​

<출력결과>