
* 개념 복습과 학습 정도를 파악하고자 포스팅합니다!
* Claude, ChatGPT를 활용하여 이미지를 생성하고 활용합니다.
상속(Inheritance)
1. 상속이란?
기존 클래스의 필드와 메서드를 새로운 클래스가 물려받은 것.
코드를 재사용하고 계층 구조를 만들수 있어요.
현실 비유를 하자면, 부모님의 재산(필드, 메서드)을 자식이 물려받고, 자식은 거기에 자신만의 것을 추가할 수 있는거죠!

상속의 핵심 키워드는 extends !
class 자식클래스 extends 부모클래스 { }
2. 상속 기본 코드
// 부모 클래스
public class Animal {
String name;
int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public void eat() {
System.out.println(name + "이(가) 먹어요.");
}
public void sleep() {
System.out.println(name + "이(가) 자요.");
}
}
// 자식 클래스
public class Dog extends Animal {
String breed; // 추가 필드
public Dog(String name, int age, String breed) {
super(name, age); // 부모 생성자 호출
this.breed = breed;
}
public void bark() { // 추가 메서드
System.out.println(name + "이(가) 짖어요. 멍멍!");
}
}
Dog dog = new Dog("초코", 3, "말티즈");
dog.eat(); // 부모꺼 사용 — "초코이(가) 먹어요."
dog.sleep(); // 부모꺼 사용 — "초코이(가) 자요."
dog.bark(); // 자기꺼 사용 — "초코이(가) 짖어요. 멍멍!"
3. super 키워드
부모 클래스를 가리키는 참조.
this가 자신을 가리키듯, super는 부모를 가리킵니다.

super()를 직접 쓰지 않으면 Java가 자동으로 super()를 첫 줄에 삽입해요.
그래서 부모 클래스에 기본 생성자가 없으면 컴파일 오류가 발생합니다.
4. 메서드 오버라이딩(Overriding)
부모 클래스의 메서드를 자식 클래스에서 재정의하는 것.
같은 이름이지만 자식에 맞게 동작을 바꿀 수 있습니다.

public class Animal {
public void sound() {
System.out.println("...");
}
}
public class Dog extends Animal {
@Override
public void sound() {
System.out.println("멍멍!");
}
}
public class Cat extends Animal {
@Override
public void sound() {
System.out.println("야옹!");
}
}
@Override 어노테이션은 필수는 아니지만 붙이는 게 좋은 것 같습니다.
오타나 잘못된 오버라이딩을 컴파일러가 잡아줍니다.
5. 오버라이딩 vs 오버로딩

6. 다형성(Polymorphism)
부모 타입 변수로 자식 객체를 참조할 수 있는 것.
상속과 오버라이딩이 합쳐져서 만들어지는 강력한 특성입니다!

Animal a1 = new Dog("초코", 3, "말티즈");
Animal a2 = new Cat("나비", 2);
a1.sound(); // "멍멍!" — Dog의 sound() 호출
a2.sound(); // "야옹!" — Cat의 sound() 호출
// 배열로 묶어서 일괄 처리
Animal[] animals = {
new Dog("초코", 3, "말티즈"),
new Cat("나비", 2),
new Dog("코코", 5, "푸들")
};
for (Animal animal : animals) {
animal.sound(); // 각자 자신의 sound() 호출
}
// 멍멍!
// 야옹!
// 멍멍!
다형성 덕분에 새로운 동물 클래스(Bird, Fish 등)가 추가되어도 반복문 코드를 수정하지 않아도 됩니다.
7. 형변환(업캐스팅 / 다운캐스팅)

다운캐스팅 전에는 반드시 instanceof로 실제 타입을 확인해야 합니다!!!
Animal a = new Dog("초코", 3, "말티즈");
// instanceof로 타입 확인 후 다운캐스팅
if (a instanceof Dog) {
Dog d = (Dog) a;
d.bark(); // 안전하게 사용
}
핵심 정리

'Language > Java' 카테고리의 다른 글
| [Java] 배열에 대해서 (0) | 2026.04.22 |
|---|---|
| [Java] 추상 클래스 & 인터페이스 완전히 정리해버리기 (0) | 2026.04.22 |
| [Java] 생성자 & 캡슐화 완전히 정리해버리기 (0) | 2026.04.22 |
| [Java] 메서드 (0) | 2026.04.20 |
| [Java] 클래스와 객체 (0) | 2026.04.20 |