Today I Learned-15
자바프로그래밍 - 4
- 상속과 다형성
- 가상 메서드 오버라이딩
- 다운 캐스팅
- 추상 클래스
클래스와 객체 - 6. 정보 은닉
- 접근 제어자
- public : 외부 클래스에서 제한 없이 접근 가능
- private : 외부 클래스에서 접근 불가, ‘동일 클래스’에서만 OK!
- protected : 동일 패키지, ‘상속 관계의 클래스’에서 접근 가능
- 없는 경우 : defualt, 동일 패키지 안에서는 접근 가능
상속과 다형성 - 1. 상속?
- 개념
- ‘하위 클래스’가 ‘상위 클래스’의 것을 물려받음
상위에서 선언한, 구현한 것들 그대로 가져다 씀
- ‘상위 클래스’가 ‘하위 클래스’를 포괄
ex. 동물 > 조류 > 독수리
- ‘하위 클래스’가 ‘상위 클래스’의 것을 물려받음
- 문법
- ex.
Class Human extends Mammal { ... }
‘사람’클래스가 ‘포유류’클래스를 상속한다.
- ex.
상속과 다형성 - 2. 상속에서 클래스 생성과 형 변환
- Super
- 하위 클래스 생성자 호출할 때, ‘Super()’ 즉 상위 클래스 생성자 먼저 호출
- 다형성
- 따라서, 하위 클래스는 ‘하위 클래스’형이면서 동시에 ‘상위 클래스’형
- ex.
Customer man1 = new VIPCustomer();
- 상위 클래스 Customer형으로 선언한 변수 ‘man1’
- ‘man1’의 인스턴스형은 하위 클래스 VIPCustomer
- 상위 클래스 Customer형으로 선언한 변수 ‘man1’
상속과 다형성 - 3. 메서드 오버라이딩
- 오버라이딩 : 메서드 (재정의)덮어쓰기
- 표시:
@Override ...
- 애노테이션(@): ‘주석’이라는 의미, 컴파일러에게 특정한 정보를 제공
- 표시:
애노테이션 | 설명 |
---|---|
@Override | 재정의된 메서드라는 정보 제공 |
@FunctionInterface | 함수형 인터페이스라는 정보 제공 |
@Deprecated | 이후 버전에서 사용 안할 수 있는 변수, 메서드에 사용 |
@SuppressWarnings | 특정 경고가 나타나지 않도록 함 |
- 가상 메서드(중요!)
- 전제1. 상위 클래스 A > 하위 클래스 B 상속
- 전제2. A example = new B(); 생성
- 전제3. 상위 클래스에 메서드1, 하위 클래스에 (재정의된)메서드1 존재
- 적용 우선 순위 : (재정의)메서드1 > 메서드1 > 최상위(Object)
- 재정의된 메서드1이 곧 가상 메서드!
상속과 다형성 - 4. 다형성
- 다형성 테스트(중요!) 교재 p.260
- 장점
- 프로그램의 확장성 up
만들어 놓은 자료형에 같은 타입 계속 추가
- 유지보수 편의성 up
공통부분은 상위에서, 특정부분만 하위에서
- 프로그램의 확장성 up
- 참고
상속은 하나의 클래스만! (다중 상속 불가)
상속과 다형성 - 5. 다형성 활용
- 교재 p.267~268 코드 확인
상속과 다형성 - 6. 다운 캐스팅과 instanceof
- 하위 클래스로의 형 변환
- 전제1. 상위 클래스 A > 하위 클래스 B 상속
- 전제2. A example = new B(); 생성
- 전제3. 하위 클래스 B에만 있는 메서드2
- example.메서드2 사용 가능? => 일단 불가!
- 다운 캐스팅 필요! ‘( ): 캐스팅 연산자’
추상 클래스 - 1. 추상 클래스(abstract class)
- 문법 : ex.
public abstract class Computer
- 구현 코드가 없는(함수 몸체가 없는) ‘추상 메서드’를 반드시 1개 이상 포함
- 추상 클래스 내에서는 메서드 선언도 abstract 표시!
- 메서드 구현되어 있지 않으므로, 인스턴스로 생성 불가!!
- 추상 클래스 왜 쓰나?
- 반드시 필요한 기능, but 하위 클래스마다 내용을 다르게 해야 할 경우
- 상위에서 추상 메서드 선언만!(구현X)
- 하위에서 오버라이딩, 즉 재정의!(안하면 오류남)
추상 클래스 - 2. 템플릿 메서드
- 정해진 틀이 있는 메서드 (like 디자인 패턴)
- final 선언하여, 하위 클래스에서도 변경 불가
- final 선언하여, 하위 클래스에서도 변경 불가
- 템플릿 메서드의 역할
- 실행 순서(시나리오)가 정해져 있다!!
추상 클래스 - 3. final 예약어
사용 위치 | 설명 |
---|---|
변수 | final 변수는 상수를 의미 |
메서드 | final 메서드는 하위에서 재정의 불가 |
클래스 | final 클래스는 상속 불가 |
공지
- 사회적 거리두기 해제에 따라 의무 집체교육 계획중?
과제, ~5/9(월)까지 제출
범위: 책 -> p.231~312 까지
- 복습/연습문제
- ‘1분 복습’, ‘연습 문제’의 문제&답, ‘타이핑’
- ‘나혼자 코딩’, ‘타이핑, 디버그’
제출파일: 이형록_220428_과제제출.txt
- 실습코드
- 이클립스에 타이핑 (패키지, 클래스 동일하게)
제출파일: 이형록_220428_실습코드.txt (이클립스에서 작성한 내용을 복사)
- 이클립스에 타이핑 (패키지, 클래스 동일하게)
- 보충자료 확인
다음 강의 준비
nice!!