상속

이수현·2025년 7월 3일

Java

목록 보기
9/10
post-thumbnail

1. 상속이란?

  • 상속이란 기존 클래스(부모 클래스, 상위 클래스)의 속성 기능(필드와 메서드)을 새로운 클래스(자식 클래스, 하위 클래스)가 물려받은 것
  • 이것을 통해 코드 재사용, 유지보수성, 확장성을 높일 수 있습니다.

2. 용어 정리

  • 부모 클래스(Super Class) : 상속을 제공하는 클래스
  • 자식 클래스(Sub Class) : 상속을 받는 클래스
  • extends 키워드 : Java에서 상속을 나타내는 키워드

3. 기본 구조 (Java 예시)

//부모 클래스
public class Animal{
   String name;
   
   public void eat(){
      System.out.println("먹는중...");
   }
}

//자식 클래스
public class Dog extends Animal {
   public void bark(){
      System.out.println("멍멍");
   }
}
//사용
public class Main{
   public static void main(String[] args) {
      Dog dog = new Dog();
      dog.name = "바둑이"   // 부모로부터 상속된 필드
      dog.eat();          // 부모로부터 상속된 메서드
      dog.bark();         // 자식 클래스 고유 메서드
   }
}
  • Dog 는 Animal 을 상속받았기 떄문에, Animal의 name 과 eat()을 사용할 수 있습니다.

4. 메서드 오버라이딩 (Overriding)

자식 클래스가 부모 클래스의 메서드를 재정의(덮어쓰기) 할 수 있습니다.

public class Dog extends Animal{
   @Override
   public void eat(){
      System.out.println("개밥 먹는 중...");
   }
}
  • @Override는 매서드 재정의를 명시합니다.

5. 생성자와 상속

  • 생성자(constructor)는 상속 되지 않음
  • 하지만 자식 클래스의 생성자에서 super()를 통해 부모 생성자를 호출 할 수 있습니다
public class Animal{
   public Animal(String name){
      System.out.println("Animal 생성자 호출: " + name);
   }
}

public class Dog extends Animal {
   public Dog(){
   super("강아지");   // 부모 생성자 호출
   }
}

6. super 키워드

부모 클래스의 필드나 메서드, 생성자를 호출 할 때 사용합니다.

pubblic class Dog extends Animal {
   public void printName(){
      System.out.println("이름: " + super.name);   // 부모 필드 접근
   }
   @Override
   public void eat(){
      super.eat();   // 부모 메서드 호출
      System.out.println("강아지가 밥 먹는다");
   }
}

7. 상속의 특징과 제약

  1. 단일 상속만 가능
  • 한 클래스는 하나의 부모 클래스만 상속 가능
  • 다중 상속은 불가능하지만, 인터페이스를 통해 보안 가능
  1. 접근 제어자의 영향을 받음
  • private 멤버는 자식 클래스에서 직접 접근 불가능
  • protected, public은 접근 가능
  1. 상속은 is-a 관계
  • 자식 클래스는 부모 클래스의 일종이다

8. 상속의 장점

  • 코드 재사용 : 공통 기능은 부모 클래스에 작성하여 여러 클래스에서 사용 가능
  • 유지보수 용이 : 변경 사항을 부모 클래스 하나만 수정하면 자식에도 반영됨
  • 확장성 : 새로운 기능을 추가 할 때 기존 코드를 수정하지 않고 자식 클래스로 확장 가능
  • 다향성 지원 : 부모 타입으로 자식 객체를 처리 가능

9. 다향성과 상속의 관계

Animal a = new Dog();   // 부모 타입으로 자식 객체 참조
a.eat();                // 자식 클래스의 오버라이딩 메서드 호출
  • 실행 시점에 실체 객체의 메서드를 호출함(다향성)
profile
신입개발자의 공부 기록

0개의 댓글