반응형
1. 상속
1) 상속의 정의
- 이미 잘 개발된 클래스를 재사용하여 새로운 클래스를 만들기 때문에, 중복되는 코드를 줄여줌
-> 부모 클래스의 수정으로 모든 자식 클래스들도 수정되는 효과를 가져오므로, 유지 보수 시간을 줄일 수 있음 - 예시: 부모 클래스 A.java, 자식 클래스 B.java
// 클래스 A
public class A {
int field1;
void method1() { ... }
}
// 클래스 A를 상속한 클래스 B
public class B extends A {
String field2;
void method2() { ... }
}
2) 클래스 상속의 특징
- 자식 클래스를 선언할 때 어떤 부모 클래스를 상속받을 것인지 결정하고, 선택된 부모 클래스를 extends 뒤에 기술
- 자바에서는 여러 개의 부모 클래스를 상속할 수 없기 때문에, extends 뒤에는 단 하나의 부모 클래스만 와야 함
- 부모 클래스에서 private 접근 제한을 갖는 필드와 메서드는 상속 대상에서 제외
- 부모 클래스와 자식 클래스가 다른 패키지에 존재할 경우, default 접근 제한을 갖는 필드와 메서드도 상속 대상에서 제외
class 자식클래스 extends 부모클래스 {
// 필드
// 생성자
// 메서드
}
3) 부모 생성자 호출
- 부모 객체가 먼저 생성된 후에 자식 객체가 생성됨
-> 예시: CellPhone cellPhone = new CellPhone(); 코드일 경우,
부모인 Phone 객체가 먼저 생성되고 자식인 CellPhone 객체가 생성되는 모습
- 자식 생성자를 선언하고 명시적으로 부모 생성자 호출 가능
자식클래스(매개변수선언, ...) {
// 이 super 부분이 생략될 경우, 컴파일러에 의해 자동적으로 추가되므로 부모의 기본 생성자가 존재해야 함
super(매개값, ...);
...
}
4) 메서드 재정의(오버라이딩/Overriding)
(1) 메서드 재정의 방법
- 어떤 부모 메서드가 자식 클래스에서 사용하기 적합하지 않을 경우, 상속된 일부 메서드를 자식 클래스에서 다시 수정하여 사용
-> 부모 객체의 메서드는 숨겨지므로, 자식 객체에서 메서드를 호출하면 재정의된 자식 메서드가 호출됨
- 필수 조건
- 부모의 메서드와 동일한 시그니처(리턴 타입, 메서드 이름, 매개 변수 목록)를 가짐
- 접근 제한을 더 강하게 재정의할 수 없음
-> 부모 메서드가 public 접근 제한을 가지고 있을 경우, 자식 메서드에서 default나 private로 수정할 수 없음
=> 반대로 부모 메서드가 default 접근 제한을 가지면, 자식 메서드는 default 또는 public을 가질 수 있음 - 새로운 예외(Exception)를 처리할 수 없음
(2) 부모 메서드 호출
- 자식 클래스 내부에서 재정의된 부모 클래스의 메서드를 호출해야 하는 상황이 발생할 경우,
super 키워드를 붙여 부모 메서드 호출
5) final 클래스와 final 메서드
- final 키워드를 클래스 앞에 붙이면 상속할 수 없는 클래스가 됨
-> 부모 클래스가 될 수 없으므로 자식 클래스를 만들지 못함 - final 키워드를 메서드 앞에 붙이면 오버라이딩 할 수 없는 메서드가 됨
-> 부모 클래스를 상속하여 자식 클래스를 선언하더라도, 자식 클래스에서 오버라이딩 할 수 없는 메서드
2. 클래스의 타입 변환과 다형성
1) 다형성의 정의
- 사용 방법이 동일한 다양한 객체를 이용하여 다양한 실행결과가 나오도록 하는 성질
-> 구현하려면 메서드 오버라이딩과 타입 변환이 필요
2) 클래스의 자동 타입 변환(promotion)
- 상속 관계에 있는 클래스 사이에서도 프로그램 실행 도중에 자동으로 타입 변환이 발생
-> 바로 위의 부모가 아니더라도, 상위 계층에서 상위 타입이라면 자동 타입 변환이 일어날 수 있음 - 자식은 부모의 특징과 기능을 상속받기 때문에, 부모와 동일하게 취급될 수 있음
- 조건
// 자식 클래스의 객체가 부모 클래스 타입으로 변환
부모타입 변수 = 자식타입;
- 예시
3) 필드의 다형성
- 필드의 타입을 부모 타입으로 선언하면, 다양한 자식 객체들이 저장되어 필드 사용 결과가 달라지는 성질
4) 매개 변수의 다형성
- 메서드 호출 시, 매개값을 다양화하기 위해 매개 변수에 자식 객체를 지정하는 것
5) 클래스의 강제 타입 변환(casting)
- 부모 타입을 자식 타입으로 변환
-> 자식 타입이 부모 타입으로 자동 타입 변환한 후, 다시 자식 타입으로 변환할 때 사용
// 부모타입을 자식타입으로 변환
자식타입 변수 = (자식타입) 부모타입;
- 업캐스팅(Upcasting): 자식 클래스 객체를 부모 클래스 타입으로 변환
- 다운캐스팅(Downcasting): 부모 클래스 타입을 자식 클래스 타입으로 변환
반응형
'자바(JAVA) > 미니 프로젝트 & 기초 공부' 카테고리의 다른 글
Java 기초 또 다시 공부하기 13일차 - 인터페이스, 인터페이스의 타입 변환과 다형성 (2) | 2025.06.16 |
---|---|
Java 기초 또 다시 공부하기 12일차 - 상속(추상 클래스와 추상 메서드) (0) | 2025.06.13 |
Java 기초 또 다시 공부하기 10일차 - 객체 지향 프로그래밍(인스턴스 멤버와 정적 멤버, 패키지와 접근 제한자) (0) | 2025.06.11 |
Java 기초 또 다시 공부하기 9일차 - 객체 지향 프로그래밍(필드, 생성자, 메서드) (0) | 2025.06.05 |
Java 기초 또 다시 공부하기 8일차 - 객체 지향 프로그래밍(객체의 특징, 객체 간의 관계, 클래스와 인스턴스 (0) | 2025.06.04 |