[이것이 자바다] 06. 상속
안녕하세요. 이번에는 자바의 상속에 대해 정리한 내용입니다. 상속도 객체 지향의 중요한 요소지요. 객체지향의 장점을 정말 부각시켜주는 좋은 요소라고 생각합니다.
1. 상속의 필요성 (코드 재사용과 확장)
- 상속(Inheritance)
- 만들어진 클래스(부모)의 코드 상속 >> 새로운 클래스(자식)에서 코드 재사용 + 새로운 기능 추가 확장합니다.
- 부모 클래스 (Superclass)
- 물려주는 클래스입니다.
- 자식 클래스 (Subclass)
- 물려받는 클래스입니다.
2. 상속 구현
extends키워드 >> 상속관계 명시합니다.
// 부모 클래스
public class SUP {
public String str1;
public String str1;
public void method1() {
}
public void method3() {
}
}
// 자식 클래스
public class SUB extends SUP {
public String str3;
public void method3(String str3) {
this.str3 = str3;
}
}
- SUB 클래스
- (private 제외) SUP의 모든 필드/메서드 상속 사용 가능 + 추가 필드/메서드
3. 자식 객체 생성 과정
자식 객체 생성할때 메모리 작동 과정입니다.
- 자식 객체 내부 부모 객체 먼저 생성 >> 자리 잡기
- 자식 클래스에 선언된 멤버들 추가 생성
- 자식 클래스의 생성자 호출 >> 생성자 첫 줄에 반드시 부모 클래스 생성자 먼저 호출합니다.
super(매개변수): 자식 생성자 내부 부모 생성자 호출 코드입니다.
4. 메소드 오버라이딩
- 상속 받은 메소드 자식의 상황에 맞게 내용을 새로 재정의하는 것입니다.
- 조건
- 부모 메소드와 리턴 타입, 이름, 매개변수 완전히 동일해야 합니다.
@Override어노테이션- 메소드가 오버라이딩된 것임을 컴파일러에 알려주는 표시입니다.
- 실수하면 컴파일러가 에러를 발생시켜 실수 막아주는 안전장치 역할을 합니다.
public class SUP {
double method1(double d1) {
// ...
return ...;
}
}
public class SUB extends SUP {
@Override
double method1(double d1) {
// 다른 실행문 차이
return ...;
}
}
5. super 키워드 활용
super: 부모 가리키는 특별한 참조입니다.super(): 부모 생성자 호출 (생성자의 첫 줄에서만 사용)super.필드명/super.메소드명()- 자식 클래스에서 부모의 멤버가 가려졌을 때 숨겨진 부모의 멤버 직접 접근에 사용합니다.
6. 다형성 (Polymorphism)
- 다양한 형태를 가질 수 있는 능력입니다.
- 상속 관계에서 다형성 : 부모 타입의 참조 변수로 자식 객체를 다룰 수 있는 능력입니다.
부모 타입 변수 = 자식 객체;
- 하나의 타입으로 다양한 자식 객체들 통일적으로 관리 가능합니다.
자동 타입 변환 (Promotion)
자식 객체 부모 타입 변수에 대입 자동으로 부모 타입 변환됩니다.
- 변환 후 한계
- 변환 후 참조 변수는 부모 클래스에 선언된 멤버(필드, 메소드)에만 접근 가능합니다.
- 자식 클래스 고유한 멤버는 사용 불가능합니다.
- 자식 클래스에서 오버라이딩한 메소드 존재 >> 호출 시 재정의된 메소드 실행됩니다.
강제 타입 변환 (Casting)
- 변환된 참조 변수를 다시 원래의 자식 타입으로 변환합니다.
- 자식 클래스 고유의 멤버 사용 가능합니다.
instanceof연산자- 강제 타입 변환은 타입과 실제 객체 불일치 >>
ClassCastException오류 발생합니다. 참조변수 instanceof 타입- 참조변수가 타입과 일치하는지 확인
T/F
- 참조변수가 타입과 일치하는지 확인
- 강제 타입 변환은 타입과 실제 객체 불일치 >>
7. 추상 클래스 (Abstract Class)
abstract키워드가 붙은 클래스. 미완성된 설계도입니다.- 특징
- 객체 직접 생성 불가능 (
new AbstractClass()불가능) - 하나 이상의 추상 메소드 포함합니다.
- 객체 직접 생성 불가능 (
- 추상 메소드 (Abstract Method)
abstract 리턴타입 메소드이름();- 실행 내용(
{})이 없는 미완성 메소드입니다.
- 실행 내용(
- 목적
- 여러 자식 클래스가 공통 공유하는 필드/메소드 정의합니다.
- 일부 메소드(추상메소드)
- 각 자식 클래스가 자신의 상황에 맞게 반드시 직접 구현 강제(오버라이딩 강제)합니다.
// 추상 개념
public abstract class ABS {
public String str1;
public abstract void method();
}
public class SUB extends ABS {
@Override
public void method() {
//구현
}
}
8. final/protected
final클래스- 상속 금지
- 다른 클래스가
extends불가능합니다.
final메소드- 오버라이딩 금지
- 자식 클래스에서 재정의 불가능합니다.
protected접근 제한자- 같은 패키지에서
default처럼 자유롭게 접근가능합니다. - 다른 패키지에서 자식 클래스만 부모의
protected멤버에 접근 가능합니다.
- 같은 패키지에서
감사합니다.
'Language > JAVA' 카테고리의 다른 글
| [이것이 자바다].ch8.중첩선언과 익명객체 (0) | 2025.12.27 |
|---|---|
| [이것이 자바다].ch7.인터페이스 (0) | 2025.12.27 |
| [이것이 자바다].ch5.클래스 (0) | 2025.12.26 |
| [이것이 자바다].ch4.참조타입 (3) | 2025.12.25 |
| [이것이 자바다].ch3.조건문과 반복문 (0) | 2025.12.25 |