PHpullh
학습 라이브러리/Java/클래스 & 상속 & @Override

JAVA · 객체지향

클래스 & 상속 & @Override

Java OOP의 핵심. 캡슐화, 상속, 다형성의 실전 적용.

객체지향입문abstractextends@Overridesuperfinal

핵심 설명

Java OOP의 핵심. 캡슐화, 상속, 다형성의 실전 적용.

Java code

// 부모 클래스
public abstract class Animal {
    private final String name;   // 캡슐화 (private)
    protected int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age  = age;
    }

    // abstract — 하위 클래스에서 반드시 구현
    public abstract String sound();

    // 공통 구현
    public void introduce() {
        System.out.printf("%s: %s (나이 %d)%n",
            name, sound(), age);
    }

    public String getName() { return name; }
}

// 자식 클래스
public class Dog extends Animal {
    private final String breed;

    public Dog(String name, int age, String breed) {
        super(name, age);  // 부모 생성자 호출
        this.breed = breed;
    }

    @Override
    public String sound() { return "멍멍"; }

    @Override
    public String toString() {
        return String.format("Dog{name=%s, breed=%s}",
            getName(), breed);
    }
}

// final class — 상속 불가
public final class Cat extends Animal {
    public Cat(String name, int age) { super(name, age); }

    @Override public String sound() { return "야옹"; }
}

class Main {
    public static void main(String[] args) {
        Animal[] animals = {
            new Dog("Rex", 3, "진돗개"),
            new Cat("Kitty", 2),
        };

        for (Animal a : animals) {
            a.introduce();  // 다형성

            // instanceof + Pattern Matching (Java 16+)
            if (a instanceof Dog d) {
                System.out.println("견종: " + d.breed);
            }
        }
    }
}

학습 팁

@Override 어노테이션은 선택 사항이지만 항상 붙이세요. 부모 메서드 이름을 잘못 입력해도 어노테이션 없이는 컴파일러가 오류를 잡지 못합니다.

주의할 점

Java 상속에서 super() 호출은 생성자 첫 줄이어야 합니다. 그렇지 않으면 컴파일 에러입니다.

자주 묻는 질문

클래스 & 상속 & @Override란 무엇인가요?

Java OOP의 핵심. 캡슐화, 상속, 다형성의 실전 적용.

클래스 & 상속 & @Override 학습 시 주의할 점은 무엇인가요?

Java 상속에서 super() 호출은 생성자 첫 줄이어야 합니다. 그렇지 않으면 컴파일 에러입니다.