extends와 super, 오버라이딩, 업캐스팅, instanceof, Object를 다룬다.
상속과 다형성
상속은 이미 만든 클래스의 특성을 물려받아 새 클래스를 만드는 기능입니다. 공통된 코드를 부모 클래스에 모아 두고 자식 클래스가 재사용하면 중복이 줄어듭니다. 다형성은 같은 타입으로 여러 종류의 객체를 다루게 해 줍니다.
학습 목표
extends로 클래스를 상속하고super를 사용한다.- 메서드 오버라이딩으로 동작을 재정의한다.
- 업캐스팅과 다형성을 이해한다.
instanceof와Object의 역할을 안다.
extends로 상속하기
extends 키워드로 부모 클래스를 상속합니다. 자식은 부모의 필드와 메서드를 그대로 사용할 수 있습니다.
public class Animal {
String name;
void eat() {
System.out.println(name + "이(가) 먹습니다");
}
}
public class Dog extends Animal {
void bark() {
System.out.println(name + ": 멍멍"); // 부모 필드 사용
}
}
Dog dog = new Dog();
dog.name = "바둑이";
dog.eat(); // 부모 메서드
dog.bark(); // 자식 메서드
super
super는 부모 클래스를 가리킵니다. 부모 생성자를 호출하거나 부모 메서드를 부를 때 사용합니다.
public class Animal {
String name;
Animal(String name) {
this.name = name;
}
}
public class Cat extends Animal {
Cat(String name) {
super(name); // 부모 생성자 호출
}
}
💡 TIP — 자식 생성자에서 부모 생성자를 명시 호출하지 않으면 컴파일러가
super()를 자동으로 넣습니다. 부모에 기본 생성자가 없으면 직접super(...)를 호출해야 합니다.
메서드 오버라이딩
부모의 메서드를 자식이 자신에 맞게 다시 정의하는 것을 오버라이딩이라 합니다. @Override 어노테이션을 붙이면 안전합니다.
public class Animal {
void sound() {
System.out.println("...");
}
}
public class Dog extends Animal {
@Override
void sound() {
System.out.println("멍멍");
}
}
업캐스팅과 다형성
자식 객체를 부모 타입 변수에 담을 수 있습니다(업캐스팅). 이렇게 하면 여러 자식을 부모 타입 하나로 다룰 수 있고, 호출 시에는 실제 객체의 오버라이딩된 메서드가 실행됩니다.
Animal[] animals = { new Dog(), new Cat() };
for (Animal a : animals) {
a.sound(); // 각 객체의 실제 메서드가 호출됨
}
이것이 다형성입니다. 같은 코드가 객체의 실제 타입에 따라 다르게 동작합니다.
instanceof
객체가 특정 타입인지 검사할 때 instanceof를 씁니다. 검사와 동시에 형변환된 변수를 얻을 수도 있습니다.
Animal a = new Dog();
if (a instanceof Dog dog) {
dog.bark(); // Dog로 안전하게 사용
}
⚠️ 주의 — 부모 타입 변수로는 자식의 고유 메서드를 직접 호출할 수 없습니다.
instanceof로 확인하고 형변환해야 합니다.
Object 클래스
모든 클래스는 자동으로 Object를 상속합니다. toString(), equals() 같은 메서드를 물려받으며, 필요하면 오버라이딩합니다.
public class User {
String name;
@Override
public String toString() {
return "User(" + name + ")";
}
}
요약
extends로 부모의 특성을 물려받아 코드를 재사용합니다.super로 부모 생성자와 메서드에 접근합니다.- 오버라이딩은 부모 메서드를 자식이 재정의하는 것입니다.
- 업캐스팅과 다형성으로 여러 자식을 부모 타입으로 다룹니다.
instanceof로 타입을 확인하고, 모든 클래스는Object를 상속합니다.
연습문제
Shape클래스를 만들고area()메서드를 정의하세요.Circle이Shape를 상속하고area()를 오버라이딩하게 하세요.Shape배열에 여러 도형을 담고 다형성으로 넓이를 출력하세요.instanceof로 배열 요소가Circle인지 확인해 메시지를 출력하세요.
힌트 — 원 넓이는
반지름 * 반지름 * Math.PI입니다.
💡 연습문제 풀이
불러오는 중…
댓글 0
“Java” 강좌에 대한 댓글입니다.