inblog logo
|
나새끼메이커
    TIL (Today I Learned)

    상속

    Eungae's avatar
    Eungae
    Dec 21, 2025
    상속
    Contents
    상속 (Inheritance)class ChildClass extends ParentClass { ... }재정의 (Overriding)예시종류재정의(오버라이드)를 활용한 기능 확장상속되지 않는 클래스 final

    상속 (Inheritance)

    기존 클래스의 기능을 확장하여 새로운 클래스를 만드는 것.
    하나의 클래스가 다른 클래스의 속성과 메서드를 물려받는 것.
    • 물려주는 클래스는 부모 클래스 (Parent Class, Superclass), 물려받는 클래스는 자식 클래스(Child Class, Subclass) 라고도 부른다.
     

    class ChildClass extends ParentClass { ... }

    class Person { void eat() { print("냠냠!"); } } class Student extends Person { void study() { print("열공!"); } } void main() { Student student = Student(); student.eat(); // 냠냠! student.study(); // 열공! }
     
    cf. 부모 클래스에는 자식 클래스에 있는 멤버(속성, 메서드)를 사용할 수 없다.
    class Cart { void add() { print("장바구니에 품목이 추가되었습니다."); } } class Purchase extends Cart { void paid() { print("구매가 완료되었습니다."); } } void main() { Purchase purchase = Purchase(); purchase.add(); // 장바구니에 품목이 추가되었습니다. purchase.paid(); // 구매가 완료되었습니다. Cart cart = Cart(); cart.add(); // 장바구니에 품목이 추가되었습니다. cart.purchase; // Error : The method 'purchase' isn't defined for the type 'Cart'. }
     
    super를 통해 자식 클래스가 부모 클래스의 속성과 메서드를 사용할 수 있다.
    class Cart { String goods = "귤 1box"; void add() { print("장바구니에 품목이 추가되었습니다."); } } class Purchase extends Cart { void paid() { super.add(); print("$goods 구매가 완료되었습니다."); } } void main() { Purchase purchase = Purchase(); purchase.paid(); } /* 장바구니에 품목이 추가되었습니다. 귤 1box 구매가 완료되었습니다. */
     

    재정의 (Overriding)

    자식 클래스가 부모 클래스로부터 상속받은 속성과 메서드를 그대로 사용하지 않고, 덮어씌우는 것.
    부모 클래스에 정의되어 있는 속성이나 메서드를 새로 정의할 때 사용.
     

    예시

    <속성 오버라이드> class Cart { String goods = "귤 1box"; void add() { print("장바구니에 품목 $goods이 추가되었습니다."); } } class Purchase extends Cart { @override String goods = "고구마 1box"; void paid() { super.add(); print("$goods 구매가 완료되었습니다."); } } void main() { Purchase purchase = Purchase(); purchase.paid(); } /* 장바구니에 품목 고구마 1box이 추가되었습니다. 고구마 1box 구매가 완료되었습니다. */
    <메서드 오버라이드> class Cart { String goods = "귤 1box"; void add() { print("장바구니에 품목 $goods이 추가되었습니다."); } } class Purchase extends Cart { @override void add(){ print("$goods 구매가 완료되었습니다."); } } void main() { Purchase purchase = Purchase(); purchase.add(); // 귤 1box 구매가 완료되었습니다. }
     

    종류

    메서드 오버라이드
    class A { void foo() {} } class B extends A { @override void foo() { print("override"); } }
     
    toString() 오버라이드
    @override String toString() { return "내용"; }
    getter / setter 오버라이드
    class A { int get value => 0; } class B extends A { @override int get value => 10; }
     

    재정의(오버라이드)를 활용한 기능 확장

    <예시> class Cart { String goods = "귤 1box"; void add() { print("장바구니에 품목 $goods이 추가되었습니다."); } } class Purchase extends Cart { @override void add() { super.add(); print("$goods 구매가 완료되었습니다."); } } void main() { Purchase purchase = Purchase(); purchase.add(); }
    공통적인 속성과 메서드를 부모 클래스에 정의하고, 공통되지 않는 요소들만 따로 자식 클래스에 정의해서 중복된 코드를 줄이고, 코드의 재사용성을 높일 수 있다.
     

    상속되지 않는 클래스 final

    final class Cart { void add() { print("장바구니에 품목이 추가되었습니다."); } } class Purchase extends Cart { // Error: The type 'Purchase' must be 'base', 'final' or 'sealed' because the supertype 'Cart' is 'final'. Try adding 'base', 'final', or 'sealed' to the type. @override void add() { super.add(); print("구매가 완료되었습니다."); } } void main() { Purchase purchase = Purchase(); purchase.add(); }
     
    Share article
    Contents
    상속 (Inheritance)class ChildClass extends ParentClass { ... }재정의 (Overriding)예시종류재정의(오버라이드)를 활용한 기능 확장상속되지 않는 클래스 final

    나새끼메이커

    RSS·Powered by Inblog