20. 상속(Inheritance)

박은서's avatar
Jan 01, 2026
20. 상속(Inheritance)

1. 상속(Inheritance)

교재 p.

1️⃣ 상속이란?

새로운 클래스(자식)를 기존 클래스(부모)와 타입을 일치시키는 것

2️⃣ 상속의 목적

  • 타입 일치
  • 추상화
➡️ 다형성을 이용해서 여러가지 객체를 타입으로 일치 시킬 수 있음

3️⃣ 상속 기본 문법

class Parent { int x; void show() {} } class Child extends Parent { int y; }
  • extends 키워드 사용
  • 단일 상속만 가능

4️⃣ 상속 관계 용어

용어
의미
부모 클래스
상위 클래스, 슈퍼 클래스
자식 클래스
하위 클래스, 서브 클래스

5️⃣ 상속 되는 것 / 안 되는 것

⭕ 상속 가능

  • public / protected 필드, 메서드
  • default (같은 패키지)

❌ 상속 불가능

  • private 멤버
  • 생성자
📌 생성자는 호출만 가능

6️⃣ 생성자와 상속

class A { A() { System.out.println("A"); } } class B extends A { B() { System.out.println("B"); } }
출력:
A B
📌 부모 생성자 먼저 실행

7️⃣ super 키워드

1) 부모 멤버 접근

super.show();

2) 부모 생성자 호출

super();

8️⃣ Object 클래스

  • 모든 클래스의 최상위 부모
  • toString(), equals(), hashCode()

9️⃣ final과 상속

final class A {}// 상속 불가
final void run() {}// 오버라이딩 불가

🔟 실습

1) 이상한 나라의 앨리스 예시

package ex06.ch01; class 재판관{} class 진행자{} class 죄인{} class 왕 extends 재판관{ } class 왕비 extends 재판관{ } class 토끼 extends 진행자 { } class 모자장수 extends 죄인 { } public class Ex01 { public static void main(String[] args) { 죄인 u1 = new 모자장수(); // [죄인, 모자장수] // 토끼 u2 = new 진행자(); -> 오류! 메모리에는 진행자만 떠있음 재판관 u3 = new 왕(); // [왕, 재판관] } }

2) 지구인 예시

package ex06.ch01; class 지구인 { } class 유럽인 extends 지구인 { } class 아시아인 extends 지구인 { String color = "황색"; } class 한국인 extends 아시아인 { } class 일본인 extends 아시아인 { } class 영국인 extends 유럽인 { } public class Ex02 { public static void main(String[] args) { 한국인 s1 = new 한국인(); // [한국인 - 아시아인 - 지구인] System.out.println(s1.color); } }
notion image
ex) 한국인 → 아시아인(황색) → 지구인
⭕ 한국인 타입으로 한국인 new 해도 황색 데이터 찾을 수 있음
❌ 지구인 타입으로 한국인 new 하면 황색 찾을 수 없음
한국인, 아시아인, 지구인 모두 동일한 데이터를 가지고 있어서 찾으면 그 위로 더 이상 올라가지 않음

3) 동물 예시

package ex06.ch02; class Animal { int i = 1; String name = "동물"; } class Cat extends Animal { int i = 2; // String name = "고양이"; int age = 5; } class Dog extends Animal { int i = 3; String name = "강아지"; } public class ExVar01 { public static void main(String[] args) { Animal a1 = new Animal(); // [Animal] System.out.println(a1.i + ", " + a1.name); Dog a2 = new Dog(); // [Dog(v), Animal] System.out.println(a2.i + ", " + a2.name); Animal a3 = new Dog(); // [Dog, Animal(v)] System.out.println(a3.i + ", " + a3.name); Cat a4 = new Cat(); // [Cat(v), Animal] System.out.println(a4.i + ", " + a4.name + ", " + a4.age); } }
notion image
 
 
 
Share article