class Player {
String name = 'hi';
int xp = 1000;
void hello() {
print("Hi my name is $name");
}
}
클래스를 생성할 땐 속성에 타입을 정의해 줘야한다.
this를 쓰지 않아도 된다
변수 이름이 겹치면 써야됨
void main() {
var player = Player();
player.hello();
}
constructors
class Player {
late String name;
late int xp;
Player(String name, int xp){
this.name = name;
this.xp = xp;
}
}
class Player {
String name;
int xp;
Player(this.name, this.xp)
}
이렇게 줄이는 것도 가능
void main() {
var player = Player("hi", 1200);
var player = Player("bye", 1500);
}
named constructor parameter 도 가능
class Player {
String name;
int xp;
Player({required this.name, required this.xp})
}
void main() {
var player = Player(name:"hi", xp:1200);
}
required 붙혀두는 이유는 null 일 수도 있으면 에러나서
named constructor
class Player {
String name;
int xp;
String team;
Player({required this.name, required this.xp})
Player.createPlayer({required String name, required int xp}) : this.xp = xp, this.name = name, this.team = 'red'
}
void main() {
var player = Player.createPlayer(name:"hi", xp:1200);
}
이렇게 일반 컨스트럭쳐말고 특정 컨스트럭쳐를 만들어서 사용 가능
: 은 객체를 초기화 하겠다고 하는 것
cascade notition
class Player {
String name;
int xp;
Player({required this.name, required this.xp})
}
void main() {
var player = Player(name:"hi", xp:1200)
..name = "bye"
..xp = 100;
}
반복되는 것을 줄인다
..이 앞에 있는 클래스를 가르킨다
특징은 세미콜론을 마지막에만
enum
선택의 폭을 줄여 오타를 줄인다
enum Team { red, blue }
class Player {
String name;
int xp;
Tema team;
Player({required this.name, required this.xp, required this.team});
}
void main() {
var player = Player(name:"hi", xp:1200, team: Team.blue);
}
abstract class
추상 클래스
추상 클래스로는 객체 생성 불가
abstract class Human {
void walk();
}
추상 클래스와 추상 메소드
class, method
클래스가 어떤 모양을 가져야하는지 알려준다
class Player extends Human {
String name;
int xp;
Tema team;
Player({required this.name, required this.xp, required this.team});
void work() {
print("walk!")
}
}
inheritance
상속
class Human {
final String name;
Human({this.name});
void hello() {
print("hello")
}
}
enum Team { red, blue }
class Player extends Human {
Team team;
Player({required this.team, required this.name}) : super(name);
@override
void hello(){
super.hello();
print("bye");
}
}
super 를 이용해서 부모 클래스와 상호작용
@override 를 이용해 부모를 수정해서 가지기 가능
void main () {
var player = Player(team: Team.red, name: "hi");
}
mixin
생성자가 없는 constructor가 없는 클래스여야 한다
클래스에 프로퍼티를 넣을 때 사용
class Strong {
final double st = 15.13;
}
class QuickRun {
void run() {
print("run!")
}
}
class Player with Strong, QuickRun {
String name;
int xp;
Tema team;
Player({required this.name, required this.xp, required this.team});
}
이렇게 붙여버린다