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");
}
}