Flutter를 공부하다 다양한 상속 관계 키워드를 보게 되었다.
extends
- 다중 상속 불가능
- 부모 클래스의 메서드를 모두 구현하지 않아도 된다.
class Animal {
void makeSound() {
print('Some sound');
}
}
class Dog extends Animal {
void bark() {
print('Woof!');
}
}
void main() {
var dog = Dog();
dog.makeSound(); // 상위 클래스의 메서드 호출
dog.bark(); // 하위 클래스의 메서드 호출
}
implements
- 다중 상속 가능
- 모든 부모 클래스의 메서드를 오버라이딩해서 구현 해주어야 한다.
abstract class Vehicle {
void drive();
}
class Car implements Vehicle {
@override
void drive() {
print('Car is being driven.');
}
}
void main() {
var car = Car();
car.drive();
}
with
- extends와 implements의 특징을 합쳐 놓은 것
- 다중 상속 가능
- 부모 클래스의 메서드를 모두 구현하지 않아도 된다.
- mixin 키워드만 상속 가능 (일반 클래스 불가능)
mixin Swim {
void swim() {
print('Swimming...');
}
}
class Fish with Swim {
// Fish 클래스에는 swim 메서드가 포함됩니다.
}
void main() {
var fish = Fish();
fish.swim(); // Swim mixin의 메서드 호출
}