DART

[노마드코더 : Dart 시작하기] #4.8 Inheritance

유호야 2022. 11. 21. 06:18
반응형
class Human {
  final String name;
  Human({required this.name});
  void sayHello() {
    print('hi my name is $name');
  }
}

enum Team { blue, red }

class Player extends Human {
  final Team team;

  Player({required this.team, required String name}) : super(name: name);

  @override
  void sayHello() {
    super.sayHello();
    print('And I play for ${team}');
    //${team}과 $team의 차이는?
    //Human.sayHello() - doesn't work
  }
}
// 상속받은 이상 이미 name과 sayHello()함수는 존재한다.
// super은 조상 클래스에서 생성자를 가져오는 것(?)

void main() {
  var player = Player(team: Team.blue, name: 'Ronaldo');
  player.sayHello();
}

 

복습

enum Team { blue, green }

class Human {
  String name;

  Human(this.name);
  // Human({required this.name});

  void sayHello() {
    print('hello my name is $name.');
  }
}

class Player extends Human {
  final Team team;

  Player({required Team this.team, required String name}) : super(name);
  // we also need to call the constructor of 'Human' class
  // we need to set the name of 'Human'

  @override
  void sayHello() {
    super.sayHello();
    print('my team is $team, Thank you.');
  }
}

void main() {
  var player1 = Player(team: Team.green, name: 'Ronaldo');

  //var human1 = Human('Ronaldo');
  // var human1 = Human(name: 'Ronaldo');
  //human1.sayHello();
}

즉 : super(name) 부분은 생성자를 만들 때 Human에서 상속받은 name 값을 Human 클래스의 생성자에서도 거쳐야 하기 때문에 전달하기 위해서 super(name)이라고 전해준다. 

super는 조상 클래스를 말하는 것이니 Human(name) 한다고 생각하면 된다.  

 

한 번 더 복습해보면 좋을 듯!

반응형