topic★★★★★난이도 · 약 25분
상속
부모 클래스의 멤버를 자식이 물려받아 재사용·확장하는 IS-A 관계.
#Java#객체지향#IS-A
왜 배우는가
다형성의 전제 조건. 상속 관계가 성립하지 않으면 업캐스팅도, 오버라이딩도 일어나지 않는다.
Java는 `extends` 키워드로 단일 상속만 지원한다. 자식은 부모의 public/protected 멤버를 물려받지만, 생성자와 private 멤버는 상속되지 않는다.
java
class Animal {
String name;
Animal(String name) { this.name = name; }
void eat() { System.out.println(name + " 먹음"); }
}
class Dog extends Animal {
Dog(String name) {
super(name); // 부모 생성자 호출 (필수)
}
void bark() { System.out.println(name + " 멍멍"); }
}
Dog d = new Dog("뽀삐");
d.eat(); // 뽀삐 먹음 ← 상속된 메서드
d.bark(); // 뽀삐 멍멍 ← 자식 고유 메서드super(...)는 자식 생성자의 첫 줄에 와야 한다. 명시하지 않으면 컴파일러가 자동으로 `super();`를 삽입하므로, 부모에 기본 생성자가 없으면 컴파일 에러가 난다.
실기 드릴 1문항
code실기 드릴 · 코드 추적
다음 코드의 출력은?
java
class A {
A() { System.out.println("A"); }
}
class B extends A {
B() { System.out.println("B"); }
}
class C extends B {
C() { System.out.println("C"); }
}
public class Test {
public static void main(String[] args) {
new C();
}
}