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() 호출은 생성자 첫 줄이어야 합니다. 그렇지 않으면 컴파일 에러입니다.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.