# Default constructor
// class 클래스명 {
// 클래스명() {
// }
// }
class Person {
Person() {
}
}
# 예시
class Person {
Person() {
print("This is Person constructor!");
}
}
class Student extends Person {
}
main() {
var student = Student();
}
------------------------------------------------------------------------------------------
# 결과
This is Person constructor!
extends
키워드가 어떤 클래스로부터 상속받을지 지정하는 역할을 함# 예시
class Person {
Person() {
print("This is Person constructor!");
}
}
class Student extends Person {
Student() {
print("This is Student constructor!");
}
}
main() {
var student = Student();
}
------------------------------------------------------------------------------------------
# 결과
This is Person constructor!
This is Student constructor!
Tip! 참고
- 기본 생성자는 상속되지 않음
- 자식 클래스는 부모 클래스의 생성자를 상속받지 않음
- 앞서 말한 것처럼 자식 클래스에서 아무 생성자도 선언하지 않으면 기본 생성자만 가짐
# Named Constructor
// class 클래스명 {
// 클래스명.생성자명()
// }
// }
class Person {
Person.init() {
}
}
# 예시
class Person {
Person() {
print("This is Person Constructor!");
}
Person.init() {
print("This is Person.init Constructor!");
}
}
class Student extends Person {
Student() {
print("This is Student Constructor!");
}
}
main() {
var person = Person();
var init = Person.init();
}
------------------------------------------------------------------------------------------
# 결과
This is Person Constructor!
This is Person.init Constructor!
Tip! 참고
- 이름 없는 생성자는 단 하나만 가질 수 있음
- 또한 이름 있는 생성자를 선언하면 기본 생성자는 생략할 수 없음
# Initializer List
// 생성자 : 초기화 리스트 {
// }
Person() : name = "Kim" {
}
:
( 콜론 ) 으로 선언할 수 있음# 예시
class Person {
String name;
Person() : name = "Kim" {
print("This is Person($name) Constructor!");
}
}
main() {
var person = Person();
}
------------------------------------------------------------------------------------------
# 결과
This is Person(Kim) Constructor!
# 예시
class Person {
String name;
int age;
Person(this.name, this.age) {
print("This is Person($name, $age) Constructor!");
}
Person.initName(String name) : this(name, 20);
}
main() {
var person = Person.initName("Kim");
}
------------------------------------------------------------------------------------------
# 결과
This is Person(Kim, 20) Constructor!
final
이어야 함const
키워드가 붙어야 함# 예시
class Person {
final String name;
final num age;
const Person(this.name, this.age);
}
main() {
Person person1 = const Person("Kim", 20);
Person person2 = const Person("Kim", 20);
Person person3 = new Person("Kim", 20);
Person person4 = new Person("Kim", 20);
print(identical(person1, person2));
print(identical(person2, person3));
print(identical(person3, person4));
}
------------------------------------------------------------------------------------------
# 결과
true
false
false
final
키워드가 선언되어 있음const
키워드가 붙어있으# 예시
class Person {
Person.init();
factory Person(String type) {
switch (type) {
case "Student":
return Student();
case "Employee":
return Employee();
}
}
String getType() {
return "Person";
}
}
class Student extends Person {
Student() : super.init();
String getType() {
return "Student";
}
}
class Employee extends Person {
Employee() : super.init();
String getType() {
return "Employee";
}
}
main() {
Person student = Person("Student");
Person employee = Person("Employee");
print("type = ${student.getType()}");
print("type = ${employee.getType()}");
}