추상클래스(Abstract Class)는 다른 클래스들에 공통된 속성과 메서드를 상속하는 클래스이며,
객체를 생성할 수 없고, 메서드는 선언만 하고 실제 로직 구현은 하지 않는다.상속받은 자식클래스에서 메서드를 override 하여 구현한다.
ex : 선언은 돼 있지만 정의 되지 않은 클래스 ( Pizza 이긴 한데 토핑이 뭐가 올라갈지 모르는 상태 )
abstract class Pizza {
topping();
}
class CheesePizza extends Pizza {
topping() {
print("Topping : Cheese");
}
}
class PepperoniPizza extends Pizza {
topping() {
print("Topping : Pepperoni");
}
}
main() {
Pizza cheesePizza = CheesePizza();
cheesePizza.topping();
Pizza pepperoniPizza = PepperoniPizza();
pepperoniPizza.topping();
}
공식문서 => "Mixin은 여러 클래스 계층에서 클래스 코드를 재사용하는 방법이다."
상속과 상관없는 별도의 확장을 위해 사용하며 상속과는 다르게 여러개를 선언 할 수 있고,
부모/자식 클래스 계층에 상관 없이 사용 할 수 있다.
mixin Fineapple {
void no() {
print("피자엔 이런거 넣으면 안됨.");
}
}
mixin Cheese {
void yes() {
print("더더더더더..");
}
}
// 부모 클래스
abstract class Pizza {
topping();
}
// 자식 클래스
class PepperoniPizza extends Pizza with Fineapple, Cheese {
topping() {
print("Topping : Pepperoni");
no();
yes();
}
}
// 부모 클래스
abstract class Menu with Fineapple {
no();
}
// 자식 클래스
class HwangDo extends Menu {
void no() {
print("???");
}
}
main() {
Pizza pepperoniPizza = PepperoniPizza();
pepperoniPizza.topping();
HwangDo menu = HwangDo();
menu.no();
}