250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 0 시작
- 네트워크
- Proxy Object
- 혼공컴운
- java
- 혼공
- cluster index
- literal
- 스프링 부트 3
- Interface
- 나도코딩
- 자율학습
- noncluster index
- 접근 제어자
- Functional Interfaces
- Access Modifier
- entrySet
- 인프런
- Spring Data JPA
- 오블완
- Lazy loading
- dotnet
- 인터페이스
- types
- 티스토리챌린지
- 혼공자바
- HashMap
- Wildcard
- 혼공학습단
- 접근제어자
Archives
- Today
- Total
지금을 사는 사람
혼자 공부하는 자바 4주차 본문
728x90
기본미션
클래스의 타입 변환에는 어떤 것이 있는지 정리하고 공유하기
- 자동 타입 변환
- 실행 도중 자동적으로 타입 변환
- 부모의 특징, 기능 상속 받음
- 바로 위 부모가 아니어도 상속 계층에 상위 타입이면 자동 변환
- 변환 이후 부모 클래스에 선언된 필드, 메소드만 접근 가능
- 부모타입 변수 = 자식 타입;
- 강제 타입 변환
- 자동 타입 변환이 된 클래스에 한하여 자식 타입으로 다시 변환이 가능
- instanceof 연산자를 사용하여 참조 객체 확인
- 자식타입 변수 = (자식타입) 부모타입;
Chapter 07 : 상속
상속
- 부모 클래스의 멤버를 자식 클래스에게 물려주는 것
클래스 상속
- 프로그램에서는 자식이 부모를 선택
class 자식클래스 extends 부모클래스 { // 필드 // 생성자 // 메소드 }
- 자바에서 상속 특징
- 여러 개의 부모 클래스를 상속할 수 없음
- 부모 클래스의 private 접근 제한을 갖는 필드와 메소드는 대상에서 제외
- 부모 클래스와 자식 클래스가 다른 패키지에 존재한다면 default 접근 제한을 갖는 필드와 메소드도 상속 대상에서 제외
부모 생성자 호출
- 자식 객체를 생성하면 부모 객체가 먼저 생성되고 그 다음에 자식 객체가 생성된다.
- 자식 객체 생성자의 첫줄에서 부모 생성자가 호출된다.
- super();는 부모의 기본 생성자를 호출한다.
- super( 매개값 ); 과 같이 명시적으로 부모 생성자를 호출 가능하다.
메소드 재정의
- 상속 받은 메소드를 자식 메소드에서 수정해야 할 필요가 있을 때 재정의하여 사용한다.
- 부모의 메소드와 동일한 시그니처를 가져야한다.
- 접근 제한을 더 강하게 재정의할 수 없다.
- 새로운 예외를 throws할 수 없다.
부모 메소드 호출
super.부모메소드();
final 클래스와 final 메소드
- final 키워드는 클래스, 필드, 메소드를 선언할 때 사용할 수 있는데, 해당 선언이 최종 상태이고 결코 수정될 수 없음을 뜻한다.
상속할 수 없는 final 클래스
public final class 클래스 {...}
- final 클래스는 부모 클래스가 될 수 없어 자식 클래스를 만들 수 없다.
재정의할 수 없는 final 메소드
public final 리턴타입 메소드( 매개변수 ) { ... }
- final 메소드는 자식 클래스에서 재정의 할 수 없다.
타입 변환과 다형성
- 다형성은 사용 방법은 동일하지만 다양한 객체를 이용해서 다양한 실행결과가 나오도록 하는 성질
자동 타입 변환
- 자동 타입 변환 (promotion) : 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것
Cat cat = new Cat(); Animal animal = cat; 또는 Animal animal = new Cat();
필드의 다형성
- 자동 타입이 필요한 이유는 필드의 타입을 부모 타입으로 선언하면 다양한 자식 객체들이 저장될 수 있다.
매개 변수의 다형성
- 메소드를 호출할 때에는 매개 변수의 타입과 동일한 매개값을 지정하는 것이 정석이지만, 매개값을 다양화하기 위해 매개 변수에 자식 객체를 지정할 수도 있다.
class Driver { void drive(Vehicle vehicle) { vehicle.run(); } }
Driver driver = new Driver();
Bus bus = new Bus();
driver.drive(bus); // Vehicle vehicle = bus; 자동 타입 변환 발생
### 강제 타입 변환
- 부모 타입을 자식 타입으로 변환하는 것
- 모든 부모타입을 자식 타입으로 강제 변환 할 수 있는 것은 아님
- 자식 타입이 부모 타입으로 자동 타입 변환한 후 다시 자식 타입으로 변환할 때 강제 타입 변환을 사용 가능
```java
Parent parent = new Child();
Child child = (Child) parent;
객체 타입 확인
- 강제 타입 변환은 자식 타입이 부모 타입으로 변환되어 있는 상태에서만 가능하기 때문에 다음과 같이 처음부터 부모 타입으로 생성된 객체는 자식 타입으로 변환 불가
Parent parent = new Parent(); Child child = (Child) parent; // 강제 타입 변환 불가
- 참조하는 객체가 부모 객체인지 자식 객체인지 확인하는 방법 : instanceof 연산자 사용
boolean result = 좌항(객체) instanceof 우항(타입)
public void method(Parent parent) {
if (parent instanceof Child) {
Child child = (Child) parent;
}
}
## 추상 클래스
- 객체를 직접 생성할 수 있는 클래스를 실체 클래스라고 한다면 이 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스라고 한다.
## 추상 클래스의 용도
- 공통된 필드와 메소드의 이름을 통일할 목적
- 실체 클래스를 작성할 때 시간 절약
### 추상 클래스 선언
```java
public abstract class 클래스 {
// 필드
// 생성자
// 메소드
}
추상 메소드와 재정의
- 메소드의 선언만 통일하고, 실행 내용은 실체 클래스마다 달라야 하는 경우 추상 메소드가 필요하다.
public abstract class Animal { public abstract void sound(); }
728x90
'스터디 > 혼공학습단' 카테고리의 다른 글
혼자 공부하는 자바 6주차 (0) | 2024.02.13 |
---|---|
혼자 공부하는 자바 5주차 (0) | 2024.02.05 |
혼자 공부하는 자바 3주차 (0) | 2024.01.17 |
혼자 공부하는 자바 2주차 (0) | 2024.01.08 |
혼자 공부하는 자바 1주차 (1) | 2024.01.03 |