Abstract Class
모든 클래스가 가지고 있어야하는 함수를 정의
메소드 OR 변수를 '구현'하는가 그대로 '사용'하는가에 따라서 상속의 형태가 갈리게 된다.
- extends
부모에서 선언 / 정의를 모두하며 자식은 메소드 / 변수를 그대로 사용할 수 있음- implements (interface 구현)
부모 객체는 선언만 하며 정의(내용)은 자식에서 오버라이딩 (재정의) 해서 사용해야함- abstract
extends와 interface 혼합. extends하되 몇 개는 추상 메소드로 구현되어 있음
class Human {
final String name;
Human({required this.name});
void sayHello() => print('I am $name');
}
enum Team { red, blue }
class Player extends Human {
final Team team;
Player({
required this.team,
required String name,
}) : super(name: name);
@override
void sayHello() {
super.sayHello();
print('Player $name in ${team} team');
}
}
void main() {
var man = Player(name: 'Sonny', team: Team.red);
man.sayHello();
}