[Java] 상속 · 다형성

배창민·2025년 9월 11일
post-thumbnail

자바 상속 · 다형성

1) 상속(Inheritance)

정의 & 특징

  • 부모 클래스의 필드/메소드를 자식이 물려받아 사용(생성자는 상속 X).
  • 단일 상속만 지원.
  • 부모의 타입도 상속되어 다형성의 토대가 됨.

기본 문법

class Academy extends Company { }

super / super()

class Computer extends Device {
  Computer(String cpu) {
    super();            // 부모 생성자 호출
    this.cpu = cpu;
  }
  @Override
  public String info() {
    return super.info() + ", cpu=" + cpu;   // 부모 메소드 확장
  }
}

오버라이딩(Overriding) 규칙

  1. 메소드명/리턴타입/매개변수(타입·개수·순서) 모두 동일
  2. private·final 메소드는 불가
  3. 접근 제어자는 같거나 더 넓게
  4. 예외는 같거나 더 구체적으로

오버라이딩 vs 오버로딩

구분오버라이딩오버로딩
위치상속 관계동일 클래스
시그니처동일매개변수 다름
목적동작 재정의편의 제공

2) 다형성(Polymorphism)

정의

  • 하나의 인스턴스가 여러 타입(상위 타입 포함)을 가질 수 있음 → 하나의 참조로 다양한 객체를 다룸.

장점 요약

  • 컬렉션/배열을 상위 타입으로 통일 관리
  • **메시지(메소드)**를 줄이고 객체별 다른 동작(오버라이딩) 제공
  • 확장 용이, 결합도↓

동적 바인딩

컴파일 시에는 상위 타입 메소드에 연결, 런타임에 실제 인스턴스의 메소드로 바인딩.

class Animal { void cry(){ System.out.println("동물"); } }
class Tiger extends Animal { @Override void cry(){ System.out.println("어흥"); } }

Animal a = new Tiger();
a.cry();   // 어흥 (오버라이딩 메소드 호출)

업캐스팅/다운캐스팅 & instanceof

Animal a = new Tiger();         // 업캐스팅(묵시적)
if (a instanceof Tiger) {
  ((Tiger) a).bite();           // 다운캐스팅(명시적)
}

3) 추상 클래스(Abstract Class)

정의

  • **추상 메소드(몸체 없음)**를 0개 이상 포함하는 불완전한 클래스.
  • 직접 인스턴스화 불가 → 하위 클래스로 구현하여 사용.
abstract class Shape {
  abstract double area();     // 추상 메소드
  String name(){ return "도형"; } // 일반 메소드도 가질 수 있음
}

사용하는 이유

  • 상위 타입을 통해 다형성 기반 제공
  • 오버라이딩 강제로 일관된 인터페이스 보장

4) 인터페이스(Interface)

정의 & 문법

  • **상수(public static final)**와 **추상 메소드(public abstract)**만 가짐.
  • implements구현(다중 구현 가능).
interface Movable {
  double PI = 3.14;     // public static final
  void move();          // public abstract
}

class Person implements Movable, java.io.Serializable {
  @Override public void move(){ System.out.println("걷기"); }
}

사용하는 이유

  • 공통 기능 강제(계약)
  • 단일 상속 한계 보완(다중 인터페이스 구현)

5) 추상 클래스 vs 인터페이스

구분추상 클래스인터페이스
키워드extendsimplements
상속/구현 수단일 상속다중 구현 가능
멤버필드/생성자/일반메소드/추상메소드상수, 추상메소드
추상 메소드 수0개 이상(기본적으로) 전부 추상
인스턴스 생성직접 불가직접 불가
상위 타입 활용가능가능

6) 요약

  • IS-A 관계가 자연스러운가? → 상속 사용
  • 메소드 계약 강제/다중 타입 필요? → 인터페이스
  • 동작 재정의는 오버라이딩, 편의 생성은 오버로딩
  • super로 부모 초기화/동작 확장, instanceof로 안전 캐스팅
profile
개발자 희망자

0개의 댓글