자바에서 부모 역할을 하는 클래스가
자식 역할을 하는 클래스에서
클래스 멤버와 클래스 메서드를
물려주는 것을 상속이라고 한다.
상속은 클래스를 재사용하는 것이므로
중복을 줄여주고 수정을 최소화할 수 있다.
[상속]
자식 클래스를 선언할 때, extends라는
키워드를 사용해 상속받을 클래스를 지명하며
자식 클래스에서 선택받은 클래스는
부모 클래스 역할을 하게 된다.
class A{
//부모클래스
}
class B extends A{
//extends로 상속
//자식클래스
}
[super()]
상속에서의 생성자, 즉 상속 관계에서
부모 클래스의 생성자와 자식 클래스의
생성자는 어떻게 사용해야 할까?
자식 클래스는 기본적으로
기본 생성자가 super()라는
메서드를 가지고 있다.
this()가 같은 클래스의 다른 생성자를
호출할 때 사용된다면, super()는
부모 클래스의 생성자를 호출할 때 사용된다.
B(){
super();
//A() 기본 생성자 호출
}
만약 부모 클래스의 생성자가 호출될 때
매개변수로 값을 전달받아 부모 클래스의
멤버변수들을 초기화 하도록 구현되어 있다면,
자식 클래스의 생성자에서 부모 클래스의 생성자를
호출할 때도 부모 클래스 대신 값을 매개변수로 받아
부모 생성자에 넣어줘야만 한다.
부모클래스(매개변수1, 매개변수2){
this.필드1 = 매개변수1;
this.필드2 = 매개변수2;
}
자식클래스(매개변수1, 매개변수2, 매개변수3){
super(매개변수1, 매개변수2);
this.필드3 = 매개변수3;
}
[오버라이딩]
상속받은 메서드를 변경해서 다시 구현할 때
우리는 메서드 오버라이딩을 사용한다.
메서드 오버라이딩은 아래와 같은 제약 사항을 지켜야 한다.
- 부모 클래스의 메서드 이름/반환타입/매개변수와 동일해야 한다/
(=메서드 시그니처가 같다)
- 부모 클래스의 메서드 보다 접근 제한을 줄일 수는 있으나
접근 제한을 늘릴 수는 없다. (public -> private X)
public class Computer{
void powerOn(){
System.out.println("컴퓨터 온")
}
}
public class Samsong extends Computer{
//상속화된 자식클래스
@Override
void powerOn(){
//같은 메서드지만 오버라이딩되어 다른 기능 구현
System.out.println("알럽 삼송")
}
}
자식 클래스에서 오버라이딩된 메서드는
자식 객체를 통해 호출하면 자식 클래스에서
구현된 메서드가 실행되고,
부모 객체를 통해 호출하면 자식 클래스와는
상관없이 부모 클래스의 원래 메서드로 호출된다.
'개주 훈련일지 > 📚 코살대 교본 학습' 카테고리의 다른 글
| 클래스 타입 변환 (0) | 2025.11.10 |
|---|---|
| 소프트웨어 생명주기 (0) | 2025.11.10 |
| 생성자 (0) | 2025.11.06 |
| 메서드(method) (0) | 2025.11.05 |
| 소프트웨어 공학의 발전 (0) | 2025.11.05 |